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;
}