首页 > 代码库 > POJ Stockbroker Grapevine 1125 多源最短路(Floyd)
POJ Stockbroker Grapevine 1125 多源最短路(Floyd)
题目大意:
股票经纪人散播谣言,总共n个人,问哪个经纪人能最快的传播谣言,然后输出那个人的编号和所散播谣言的最短时间, 假如每个点都无法全部散播的话则输出 "disjoint"
题目分析:
我们用Floyd求出每个点的最短路,
然后搜索每个点,看和这个点所连接点的最长时间就是这个人散播最后谣言的时间
然后从所有的点中找出时间最长的点
1 #include <iostream> 2 #include <cmath> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cstdio> 6 #include <algorithm> 7 #include <vector> 8 #include <queue> 9 using namespace std;10 #define INF 0xfffffff11 #define maxn 15012 13 int G[maxn][maxn];14 int n;15 16 void Floyd()17 {18 for(int k=1; k<=n; k++)19 {20 for(int i=1; i<=n; i++)21 {22 for(int j=1; j<=n; j++)23 {24 G[i][j] = min(G[i][j],G[i][k] + G[k][j]);25 }26 }27 }28 int Min = INF, index = 1;29 30 for(int i=1; i<=n; i++)31 {32 int Max = 0;33 for(int j=1; j<=n; j++)34 {35 Max = max(Max,G[i][j]);36 }37 if(Max < Min)38 {39 Min = Max;40 index = i;41 }42 }43 44 if(Min == INF)45 printf("disjoint\n");46 else47 printf("%d %d\n",index,Min);48 49 }50 void Init()51 {52 for(int i=0; i<=n; i++)53 {54 G[i][i] = 0;55 for(int j=0; j<i; j++)56 G[i][j] = G[j][i] = INF;57 }58 }59 60 int main()61 {62 while(cin >> n, n)63 {64 int t, e, w;65 Init();66 for(int i=1; i<=n; i++)67 {68 cin >> t;69 for(int j=0; j<t; j++)70 {71 cin >> e >> w;72 G[i][e] = min(G[i][e],w);73 }74 }75 76 Floyd();77 78 }79 return 0;80 }
POJ Stockbroker Grapevine 1125 多源最短路(Floyd)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。