首页 > 代码库 > POJ 1125 Stockbroker Grapevine
POJ 1125 Stockbroker Grapevine
题意:给你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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。