题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=1125 题目比较长,其实就水题一道,很明显的floyd。 只贴代码,相信大家都能看懂: #include<iostream> using namespace std; const int MAX=999999999; int g[101][101]; int main() { int n,num; while(cin>>n&&n) { for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) g[i][j]=g[j][i]=MAX; int a,b; for(int i=1;i<=n;i++) { g[i][i]=MAX; cin>>num; for(int j=1;j<=num;j++) { cin>>a>>b; g[i][a]=b; } } for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(i==j) continue; else g[i][j]=min(g[i][j],g[i][k]+g[k][j]); int Min=MAX; int Max; int Mini=0; for(int i=1;i<=n;i++) { Max=-1; for(int j=1;j<=n;j++) if(i==j) continue; else if(g[i][j]>Max) Max=g[i][j]; if(Max<Min) { Min=Max; Mini=i; } } if(Min==MAX) cout<<"disjoint"<<endl; else cout<<Mini<<" "<<Min<<endl; } return 0; }