#include #include #include #include #include #include #include using namespace std; ifstream in("response.in"); #define cin in //ofstream out("response.out"); //#define cout out const double INF = 100000000.0; int v, e, t, c, k, p; double w[1001][1001], d[1001]; bool u[1001]; double dijkstra(int start) { for (int j = 1; j <= v; j++) { d[j] = w[start][j]; u[j] = false; } d[start] = 0; for (int j = 1; j < v; j++) { double minx = INF + 1.0; int tag; for (int r = 1; r <= v; r++) if (u[r] == false && d[r] < minx) { minx = d[r]; tag = r; } if (tag == c) return d[tag]; u[tag] = true; for (int r = 1; r <= v; r++) if (w[tag][r] + d[tag] < d[r]) d[r] = w[tag][r] + d[tag]; } return INF+1.0; } int main() { cin >> v >> e >> t; for (int i = 1; i <= v; i++) for (int j = i + 1; j <= v; j++) w[i][j] = w[j][i] = INF; while (e--) { int a, b; cin >> a >> b; cin >> w[a][b]; } for (int i = 1; i <= t; i++) { printf("Scenario %d:\n", i); cin >> c >> k; double minx = INF; for (int j = 0; j < k; j++) { double dis; cin >> p; if ((dis=dijkstra(p)) < minx) minx = dis; } if (fabs(minx-INF) < 0.0001) printf("Impossible.\n\n"); else printf("%.2f\n\n", minx); } return 0; }