poj 1125 Stockbroker Grapevine(多源最短路)
2014-07-24 15:29
295 查看
链接:poj 1125
题意:输入n个经纪人,以及他们之间传播谣言所需的时间,
问从哪个人开始传播使得所有人知道所需时间最少,这个最少时间是多少
分析:因为谣言传播是同时的,对于某条路径使得所有人都知道的时间,不是时间的总和,而是路径中最长的边
从多条路径的最长边,找出最小值,因为为多源最短路,用Floyd比较方便
题意:输入n个经纪人,以及他们之间传播谣言所需的时间,
问从哪个人开始传播使得所有人知道所需时间最少,这个最少时间是多少
分析:因为谣言传播是同时的,对于某条路径使得所有人都知道的时间,不是时间的总和,而是路径中最长的边
从多条路径的最长边,找出最小值,因为为多源最短路,用Floyd比较方便
#include<stdio.h> #include<limits.h> int a[105][105]; void floyd(int n) { int i,j,k,s,pos; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(a[i][k]!=INT_MAX&&a[k][j]!=INT_MAX&&a[i][k]+a[k][j]<a[i][j]) a[i][j]=a[i][k]+a[k][j]; k=INT_MAX; pos=0; for(i=1;i<=n;i++){ s=0; for(j=1;j<=n;j++) //先求出路径中的最长边为总传播时间 if(i!=j&&a[i][j]>s) s=a[i][j]; if(s<k){ //再找出传播时间的最小值 k=s; pos=i; } } if(k==INT_MAX) printf("disjoint\n"); else printf("%d %d\n",pos,k); } int main() { int n,m,i,j,b,t; while(scanf("%d",&n)!=EOF){ if(n==0) break; for(i=1;i<=n;i++) for(j=1;j<=n;j++) a[i][j]=INT_MAX; for(i=1;i<=n;i++){ scanf("%d",&m); for(j=1;j<=m;j++){ scanf("%d%d",&b,&t); a[i][b]=t; //单向的 } } floyd(n); } return 0; }
相关文章推荐
- poj 1125 Stockbroker Grapevine(多源最短路)
- POJ 1125--Stockbroker Grapevine【多源最短路】
- poj 1125 Stockbroker Grapevine 【多源点最短路】
- POJ 1125 Stockbroker Grapevine (多源最短路Floyd)
- POJ 1125 Stockbroker Grapevine(任意两点的最短路,FLoyed 算法)
- poj-1125-Stockbroker Grapevine(floyd算法最短路)
- poj 1125 Stockbroker Grapevine 【最短路 Floyd】
- [poj 1125]Stockbroker Grapevine[Floyd最短路]
- POJ_1125_Stockbroker Grapevine(Floyd求最短路)
- 【poj 1125】最短路---Stockbroker Grapevine
- poj --1125----Stockbroker Grapevine(多源最短路径)
- POJ 1125 Stockbroker Grapevine (Floyd最短路)
- poj 1125 Stockbroker Grapevine [ 最短路]
- poj 1125 Stockbroker Grapevine(多源最短)
- poj 1125 Stockbroker Grapevine 【最短路&&克鲁斯卡尔】
- POJ 1125 Stockbroker Grapevine 【最短路(Floyd算法)】
- poj 1125 Stockbroker Grapevine(floyd求最短路)
- POJ Stockbroker Grapevine 1125 多源最短路(Floyd)
- poj 1125 Stockbroker Grapevine -- floyd 全源最短路
- POJ 1125 - Stockbroker Grapevine ( floyd最短路 )