题目链接:http://poj.org/problem?id=1125
主要是读懂题意
然后就很简单了
floyd算法的应用
代码:
1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 #define maxn 110 7 #define INF 10000100 8 int dis[maxn][maxn]; 9 int n; 10 int m; 11 void floyd() 12 { 13 for(int k=1;k<=n;k++) 14 { 15 for(int i=1;i<=n;i++) 16 for(int j=1;j<=n;j++) 17 { 18 if(k==i || k==j) continue; 19 if(dis[i][k]+dis[k][j]<dis[i][j]) 20 dis[i][j]=dis[i][k]+dis[k][j]; 21 } 22 } 23 } 24 int main() 25 { 26 int a,b; 27 while(scanf("%d",&n)!=EOF && n) 28 { 29 for(int i=1;i<=n;i++) 30 for(int j=1;j<=n;j++) 31 if(i==j) dis[i][j]=0; 32 else dis[i][j]=INF; 33 for(int i=1;i<=n;i++) 34 { 35 scanf("%d",&m); 36 while(m--) 37 { 38 scanf("%d%d",&a,&b); 39 dis[i][a]=b; 40 } 41 } 42 43 floyd(); 44 int ans=INF; 45 int t,tmp; 46 for(int i=1;i<=n;i++) 47 { 48 tmp=0; 49 for(int j=1;j<=n;j++) 50 { 51 if(j!=i && dis[i][j]>tmp) 52 tmp=dis[i][j]; 53 } 54 if(tmp<ans) 55 { 56 ans=tmp; 57 t=i; 58 } 59 60 61 } 62 cout<<t<<" "<<ans<<endl; 63 } 64 return 0; 65 }