POJ -- 1125 Stockbroker Grapevine(Floyd)
2015-02-28 18:13
267 查看
题目大意:Stockbrokers要散布一个股票的谣言,谣言只能在相互认识的人中传递,给出人与人的关系(是否认识),以及传言在某两个认识的人中传递所需的时间。求出以哪个人作为散布谣言的起点,能使得所有人都受到谣言的时间最短,并求出最后一个人得到消息的时间,如果给定的网络不完全,则输出“disjoint”。
思路分析:没有固定的源点终点,用floyd可以求任意两个点的最短路径;而求最后一个人得到消息的时间也就是最短路径的最后一个人,也就是最短路径中到源点时间最长的点。
代码实现:
思路分析:没有固定的源点终点,用floyd可以求任意两个点的最短路径;而求最后一个人得到消息的时间也就是最短路径的最后一个人,也就是最短路径中到源点时间最长的点。
代码实现:
#include<stdio.h> #define min(a,b) (a<b?a:b) int w[110][110],n; void Floyd(){ for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) w[i][j]=min(w[i][k]+w[k][j],w[i][j]); } } } int main(){ while(~scanf("%d",&n),n){ int m,s,t; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++) w[i][j]=1e9; w[i][i]=0; } for(int i=1;i<=n;i++){ scanf("%d",&m); while(m--){ scanf("%d%d",&s,&t); if(t<w[i][s]) w[i][s]=t; } } Floyd(); int sum_t,sp,last_t,elt,min_t=1e9,flag; for(int i=1;i<=n;i++){ sum_t=0,elt=-1,flag=0; for(int j=1;j<=n;j++){ if(w[i][j]==1e9){ flag=1; break; } sum_t+=w[i][j]; if(w[i][j]>elt) elt=w[i][j]; } if(!flag&&sum_t<min_t){ min_t=sum_t; sp=i; last_t=elt; } } if(min_t==1e9) printf("disjoint\n"); else printf("%d %d\n",sp,last_t); } }
相关文章推荐
- POJ_1125_Stockbroker Grapevine(Floyd求最短路)
- poj 1125 Stockbroker Grapevine(Floyd模板题)
- Stockbroker Grapevine【POJ--1125】【Floyd】
- POJ 1125 Stockbroker Grapevine (Floyd)
- [poj 1125]Stockbroker Grapevine[Floyd最短路]
- 【POJ1125】Stockbroker Grapevine(动态规划,floyd)
- POJ 1125 Stockbroker Grapevine (Floyd)
- POJ 1125 Stockbroker Grapevine (Floyd最短路)
- POJ 1125-Stockbroker Grapevine(floyd)
- POJ 1125 Stockbroker Grapevine(floyd两点间最短距离)
- POJ 1125 Stockbroker Grapevine(Floyd)
- POJ 1125 Stockbroker Grapevine(Floyd)
- POJ1125 Stockbroker Grapevine SPFA或Floyd
- POJ 1125 Stockbroker Grapevine (Floyd)
- poj 1125 Stockbroker Grapevine -- floyd 全源最短路
- poj 1125 Stockbroker Grapevine——Floyd
- poj 1125 Stockbroker Grapevine(floyd)
- POJ1125 Stockbroker Grapevine【Floyd】
- POJ 1125 Stockbroker Grapevine【floyd】
- poj1125 Stockbroker Grapevine 图论,任意两点间最短路径,floyd