水!
#include <iostream> using namespace std; #define inf 1 << 20 int dis[105][105]; int main() { int n; while (cin >> n && n) { memset(dis, inf, sizeof(dis)); for (int i = 1; i <= n; i++) { int a; cin >> a; for (int j = 1; j <= a; j++) { int b, c; cin >> b >> c; dis[i][b] = c; } } for (int k = 1; k <= n; k++) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i != j && dis[i][j] > dis[i][k] + dis[k][j]) { dis[i][j] = dis[i][k]+ dis[k][j]; } } } } int maxlength; int min_in_max = inf; int flag_source; for (int i = 1; i <= n; i++) { maxlength = 0; for (int j = 1; j <= n; j++) { if (i != j && maxlength<dis[i][j]) maxlength = dis[i][j]; } if (min_in_max>maxlength) { min_in_max = maxlength; flag_source = i; } } if (min_in_max<inf) cout << flag_source << ' ' << min_in_max << endl; else cout << "disjoint" << endl; } } |