1 //nyoj的数据改成了1000 ,然后就跪了。。 好像大神们用spfa做的 2 #include<iostream> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cstring> 6 #include<string> 7 #include<queue> 8 #include<algorithm> 9 #include<map> 10 #include<iomanip> 11 #include<climits> 12 #include<string.h> 13 #include<cmath> 14 #include<stdlib.h> 15 #include<vector> 16 #include<stack> 17 #include<set> 18 #define INF 2000000000 19 #define MAXN 110 20 #define maxn 1000010 21 #define Mod 1000007 22 #define N 1010 23 using namespace std; 24 typedef long long LL; 25 26 int n, m; 27 int v, w; 28 int G[MAXN][MAXN]; 29 int minn, pos; 30 31 void Floyd() 32 { 33 for (int k = 1; k <= n; ++k) 34 for (int i = 1; i <= n; ++i) 35 for (int j = 1; j <= n; ++j) 36 if (G[i][k] + G[k][j] < G[i][j]) 37 G[i][j] = G[i][k] + G[k][j]; 38 } 39 40 void getMin() 41 { 42 int sum; 43 minn = maxn; 44 pos = 0; 45 for (int i = 1; i <= n; ++i) { 46 sum = 0; 47 for (int j = 1; j <= n; ++j) 48 if (i!= j && G[i][j] > sum) 49 sum = G[i][j]; 50 if (minn > sum) { 51 minn = sum; 52 pos = i; 53 } 54 } 55 56 } 57 58 int main() 59 { 60 while (~scanf("%d", &n),n) { 61 for (int i = 0; i <= n; ++i) 62 for (int j = i + 1; j <= n; ++j) 63 G[i][j] = G[j][i] = maxn; 64 65 for (int i = 1; i <= n; ++i) { 66 scanf("%d", &m); 67 for (int j = 0; j < m; ++j) { 68 scanf("%d%d", &v, &w); 69 G[i][v] = w; 70 } 71 } 72 Floyd(); 73 getMin(); 74 if (minn == maxn) puts("disjoint"); 75 else printf("%d %d\n",pos,minn); 76 } 77 return 0; 78 }
代码君
时间: 2024-10-13 22:23:42