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