http://poj.org/problem?id=1125
最短路,floyd
1 #include <stdio.h> 2 #include <string.h> 3 #define N 123 4 5 int n, g[N][N]; 6 const int inf = 123456; 7 8 int min(int x, int y) 9 { 10 return x<y? x: y; 11 } 12 13 void floyd() 14 { 15 int i, j, k; 16 for(k=1; k<=n; k++) 17 { 18 for(i=1; i<=n; i++) 19 { 20 for(j=1; j<=n; j++) 21 { 22 g[i][j] = min(g[i][j], g[i][k]+g[k][j]); 23 } 24 } 25 } 26 } 27 28 int main() 29 { 30 int t, m, i, j, x, y, len; 31 int max1, result, flag; 32 while(scanf("%d", &n), n) 33 { 34 for(i=1; i<=n; i++) 35 { 36 for(j=1; j<=n; j++) 37 { 38 g[i][j] = inf; 39 } 40 } 41 for(i=1; i<=n; i++) 42 { 43 scanf("%d", &m); 44 for(j=1; j<=m; j++) 45 { 46 scanf("%d%d", &x, &len); 47 g[i][x] = len; 48 } 49 } 50 floyd(); 51 result = inf; 52 flag = 1; 53 for(i=1; i<=n; i++) 54 { 55 max1 = 0; 56 for(j=1; j<=n; j++) 57 { 58 if(i != j) 59 { 60 if(g[i][j] > max1) 61 { 62 max1 = g[i][j]; 63 } 64 } 65 } 66 if(max1 < result) 67 { 68 result = max1; 69 flag = i; 70 } 71 } 72 if(result == inf) 73 { 74 printf("disjoint\n"); 75 } 76 else 77 { 78 printf("%d %d\n", flag, result); 79 } 80 } 81 return 0; 82 }