http://poj.org/problem?id=1125
题意:有n个股票经纪人,要求从中选择一个作为散发谣言的开端,使得最后一个人收到谣言时时间时最短,当然谣言只能在有关联的两人这间传播。要注意从A到B和从B到A的时间并不等价!!
解题:典型的最短路问题,套用Floyd算法即可。
Source Code
Problem: 1125 | User: 541780774 | |
Memory: 408K | Time: 0MS | |
Language: G++ | Result: Accepted |
Source Code
#include<stdio.h> #include<stdlib.h> #include<string.h> int map[101][101],n;//顶点数n void Floyd() { int i,j,k; for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) { if(map[i][j]>map[i][k]+map[k][j]&&i!=j) map[i][j]=map[i][k]+map[k][j]; } } main() { int i,j,m,min,max,a,b,ans; while(scanf("%d",&n),n!=0) { for(i=0;i<n;i++) for(j=0;j<n;j++) map[i][j]=1000; for(i=0;i<n;i++) { scanf("%d",&m); while(m--) { scanf("%d%d",&a,&b); map[i][a-1]=b; } } Floyd(); min=1000; ans=0; for(i=0;i<n;i++) { max=0; for(j=0;j<n;j++) { if(i!=j&&map[i][j]>max) max=map[i][j]; } if(min>max) { min=max; ans=i; } } printf("%d %d\n",ans+1,min); } system("pause"); }