这题目又把我读傻了。 floyd算法,挑选出用时最少的那个股票员。每个股票员最大的时间。 #include<cstdlib> #include<cstdio> #include<string> #include<iostream> #include<cmath> using namespace std; int n,m; int g[10000][10000]; void init() { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) g[i][j]=10000; for(int i=1;i<=n;i++) g[i][i]=0; } void floyd() { for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(g[i][k]&&g[k][j]) g[i][j]=min(g[i][j],g[i][k]+g[k][j]); } int main() { int a,b,result,sum,k,maxn; while(scanf("%d",&n),n) { init(); result=1000000; for(int i=1;i<=n;i++) { scanf("%d",&m); for(int j=1;j<=m;j++) { scanf("%d%d",&a,&b); g[i][a]=b; } } floyd(); for(int i=1;i<=n;i++) { sum=0; for(int j=1;j<=n;j++) sum+=g[i][j]; if(result>sum) { result=sum; k=i; } } if(result>=1000000) printf("disjoint/n"); else { maxn=g[k][1]; for(int i=2;i<=n;i++) if(maxn<g[k][i]) maxn=g[k][i]; printf("%d %d/n",k,maxn); } } return 0; }