标签:style strong io 数据 for 代码 算法 时间
题意:给你n个股票经纪人,要你再找出联系所有人的最短时间,有则输出,无则输出一个字符串。
接下来是n组数据,每组数据开头表示第i个经纪人有m个联系人,接下来是m对数据 第一个表示 第几个联系人 第二个数则是联系到他所需要的时间
思路:这个题目主要的是理解题目的意思,理解之后就非常简单了,只要先求出每2个点的最短距离,然后再求出以第i个点为顶点到达第j个点所需要的最长距离,即可把所有的人联系一遍。因为我们求出每2个点的最短距离,所以可以用floyd算法了,这个算法是最容易理解的!
所以AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define inf 100
int d[120][120];
int main()
{
int i,j,n,k;
while(scanf("%d",&n)!=EOF)
{
if(n==0)break;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
d[i][j]=inf;
}
for(i=1;i<=n;i++)
{
int u;
scanf("%d",&u);
for(j=1;j<=u;j++)
{
int v,w;
scanf("%d %d",&v,&w);
d[i][v]=w;
}
}
for(i=1;i<=n;i++) //求出每2个点的最短距离
for(j=1;j<=n;j++)
for(k=1;k<=n;k++)
{
if(j!=k&&d[j][k]>d[j][i]+d[i][k])
d[j][k]=d[j][i]+d[i][k];
}
int temp,maxx,minn=inf;
for(i=1;i<=n;i++)//每次以i为图的顶点
{
maxx=0;
for(j=1;j<=n;j++) //找出以i为顶点的最大距离点
if(i!=j&&maxx<d[i][j])
maxx=d[i][j];
if(maxx<minn) //替换
{
minn=maxx;
temp=i;
}
}
if(minn<inf)
printf("%d %d\n",temp,minn);
else
printf("disjoint\n");
}
return 0;
}
POJ 1125 Stockbroker Grapevine,布布扣,bubuko.com
POJ 1125 Stockbroker Grapevine
标签:style strong io 数据 for 代码 算法 时间
原文地址:http://blog.csdn.net/u012313382/article/details/38338781