http://acm.pku.edu.cn/JudgeOnline/problem?id=1125
Код:
#include <stdio.h>
#define MAXN 100
#define INF 100000000
typedef int elem;
int n;
void floyd(int n,elem m[][MAXN],elem a[][MAXN]) {
int i,j,k;
for (i=0; i<n; ++i)
for (j=0; j<n; ++j) a[i][j] = m[i][j];
for (k=0; k<n; ++k)
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
if (a[i][j] > a[i][k]+a[k][j])
a[i][j] = a[i][k]+a[k][j];
}
void solve() {
int i,j;
elem m[MAXN][MAXN],a[MAXN][MAXN];
for (i=0; i<n; ++i)
for (j=0; j<n; ++j)
if (i == j) m[i][j] = 0;
else m[i][j] = INF;
for (i=0; i<n; ++i) {
int pair;
scanf ("%d",&pair);
for (j=0; j<pair; ++j) {
int d,time;
scanf ("%d %d",&d,&time);
m[i][d-1] = time; }
}
floyd(n,m,a);
int max, min=INF, md;
for (i=0; i<n; ++i) {
max = 0;
for (j=0; j<n; ++j)
if (a[i][j] > max) max = a[i][j];
if (max < min) {
min = max;
md = i+1; }
}
printf ("%d %d\n",md,min);
}
int main() {
#ifndef ONLINE_JUDGE
freopen("1125.txt","r",stdin);
#endif
while (scanf ("%d",&n) != EOF && n) solve();
#ifndef ONLINE_JUDGE
fclose(stdin);
#endif
return 0;
}