- 全点間最短距離
- ダイクストラ法またはワーシャルフロイド法が使える
static int g[128][128];
int main() {
for (int N; cin >> N && N; ) {
fill_n((int*)g, sizeof(g) / sizeof(g[0][0]), INT_MAX / 2);
for (int n = 1; n <= N; ++n) {
int M;
cin >> M;
for (int m = 0; m < M; ++m) {
int to, cost;
cin >> to >> cost;
g[n][to] = cost;
}
}
for (int k = 1; k <= N; ++k) {
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= N; ++j) {
g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
}
}
}
int bestPerson = -1;
int bestTime = INT_MAX;
for (int i = 1; i <= N; ++i) {
int maxTime = -1;
for (int j = 1; j <= N; ++j) {
if (i == j) {
continue;
}
maxTime = max(maxTime, g[i][j]);
}
if (bestTime > maxTime) {
bestTime = maxTime;
bestPerson = i;
}
}
if (bestTime == INT_MAX / 2) {
printf("disjoint\n");
} else {
printf("%d %d\n", bestPerson, bestTime);
}
}
}