Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 33141 | Accepted: 18246 |
Description
Input
Output
Sample Input
3 2 2 4 3 5 2 1 2 3 6 2 1 2 2 2 5 3 4 4 2 8 5 3 1 5 8 4 1 6 4 10 2 7 5 2 0 2 2 5 1 5 0
Sample Output
3 2 3 10
Source
有N个股票经济人可以互相传递消息,他们之间存在一些单向的通信路径。现在有一个消息要由某个人开始传递给其他所有人,问应该由哪一个人来传递,才能在最短时间内让所有人都接收到消息。若不存在这样一个人,则输出disjoint
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 #define N 101 6 int a[N][N],n,m; 7 int main(){ 8 while(scanf("%d",&n)==1&&n){ 9 for(int i=1;i<=n;i++) 10 for(int j=1;j<=n;j++) 11 if(i==j) a[i][j]=0; 12 else a[i][j]=1000000; 13 for(int i=1;i<=n;i++){ 14 scanf("%d",&m); 15 for(int j=1,v,w;j<=m;j++){ 16 scanf("%d%d",&v,&w); 17 a[i][v]=w; 18 } 19 } 20 for(int k=1;k<=n;k++) 21 for(int i=1;i<=n;i++) 22 for(int j=1;j<=n;j++) 23 if(i!=j&&i!=k&&k!=j) 24 if(a[i][j]>a[i][k]+a[k][j]) 25 a[i][j]=a[i][k]+a[k][j]; 26 int ans=0x7f,p; 27 for(int i=1;i<=n;i++){ 28 int m=-0x7f; 29 for(int j=1;j<=n;j++) 30 m=max(m,a[i][j]); 31 if(ans>m){ 32 ans=m; 33 p=i; 34 } 35 } 36 printf("%d %d\n",p,ans); 37 } 38 return 0; 39 }
POJ 1125 Stockbroker Grapevine
原文:http://www.cnblogs.com/shenben/p/5471783.html