/* source: zju 1221 *//* algo: floyd *//* author: St.Crux */ #include <cstdio> int m[20][20]; int main(){ //freopen("in.txt", "r", stdin); int i, k, j, n, a, t = 0; while(scanf("%d", &a) != EOF) { for(i = 0; i < 20; i ++) { for(k = 0; k < 20; k ++) { m[i][k] = ((i == k) ? 0 : 100); } } for(k = 0; k < a; k ++) { scanf("%d", &j); m[0][j - 1] = 1; m[j - 1][0] = 1; } for(i = 1; i < 19; i ++) { scanf("%d", &a); for(k = 0; k < a; k ++) { scanf("%d", &j); m[i][j - 1] = 1; m[j - 1][i] = 1; } } for(i = 0; i < 20; i ++) { for(k = 0; k < 20; k ++) { for(j = 0; j < 20; j ++) { if(m[i][k] > m[i][j] + m[j][k]) { m[i][k] = m[i][j] + m[j][k]; m[k][i] = m[i][k]; } } } } a = 0; scanf("%d", &n); printf("Test Set #%d\n", ++ t); for(i = 0; i < n; i ++) { scanf("%d%d", &j, &k); printf("%d to %d: %d\n", j, k, m[j - 1][k - 1]); } printf("\n"); } return 0;}

评论