您的位置:首页 > 其它

poj 1125 Stockbroker Grapevine(floyd)

2017-01-29 19:44 429 查看
http://blog.csdn.net/lyy289065406/article/details/6645856这个题解题目翻译的很棒。题目很简单

#include <cstdio>
#include <cstring>
#define INF 999999
#define MAXN 110

int map[MAXN][MAXN];
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(map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
int num;
int minute;
int res = INF;
for(int i = 1; i <= n; ++i)
{
minute = 0;
for(int j = 1; j <= n; ++j)
if(minute < map[i][j])
minute = map[i][j];
if(res > minute)
{
res = minute;
num = i;
}
}
if(res < INF)
printf("%d %d\n",num,res);
else
printf("disjoint\n");
}

int main()
{
int pair,minute,num;
while(scanf("%d",&n) && n)
{
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
if(i ==j) map[i][j] = 0;
else map[i][j] = INF;

for(int i = 1; i <= n; ++i)
{
scanf("%d",&pair);
for(int j = 0; j < pair; ++j)
{
scanf("%d %d",&num,&minute);
if(minute < map[i][num]) map[i][num] = minute;
}
}
floyd();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: