您的位置:首页 > 其它

POJ 1125 Stockbroker Grapevine(Floyd)

2016-04-27 19:21 417 查看
题目地址:http://poj.org/problem?id=1125

题意:有一群买股票的人,如何从中间选择一个人使得所有人都知道这个消息的时间最短

思路:先把N个人中最短路径中最长的算出来,再从N个人最长的路径中找出最短的

AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int inf = 0x3f3f3f3f;
int map1[110][110];
int n;
void Floyd()
{
for(int k=1; k<=n; k++)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(map1[i][j] > map1[i][k] + map1[k][j])
{
map1[i][j] = map1[i][k] + map1[k][j];
}
}
}
}
}
int main()
{
int m;
while(scanf("%d",&n) && n)
{
memset(map1,inf,sizeof(map1));
for(int i=1; i<=n; i++)
{
scanf("%d",&m);
for(int j=1; j<=m; j++)
{
int a,b;
scanf("%d%d",&a,&b);
map1[i][a] = b;
}
}
Floyd();
int ans = inf;
int l;
for(int i=1; i<=n; i++)
{
int max1 = 0;
for(int j=1; j<=n; j++)
{
if(i != j && map1[i][j] > max1)
max1 = map1[i][j];
}
if(max1 < ans)
{
ans = max1;
l = i;
}
}
if(ans == inf)
printf("disjoint\n");
else
printf("%d %d\n",l,ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: