【Floyd】POJ1125-Stockbroker Grapevine

水题,裸的Floyd。最后要求遍历一遍图的最短路径,只需要枚举将当前每一个点作为起始点。如果它不能到达其中的某一点,则该点不可能作为起始点;否则,由该点开始遍历全图的最短路径是到所有点距离中的最大值。最终结果就是这些最大值中的最小值。

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 const int MAXN=100+5;
 5 const int INF=10000;
 6 int map[MAXN][MAXN];
 7 
 8 int main()
 9 {
10     int n;
11     while (scanf("%d",&n))
12     {
13         if (n==0) break;
14         for (int i=0;i<n;i++)
15             for (int j=0;j<n;j++) map[i][j]=INF;
16             
17         for (int i=0;i<n;i++)
18         {
19             int m;
20             scanf("%d",&m);
21             for (int j=0;j<m;j++)
22             {
23                 int people,time;
24                 scanf("%d%d",&people,&time);
25                 map[i][people-1]=time;
26             }
27         }
28             
29         for (int k=0;k<n;k++)
30             for (int i=0;i<n;i++)
31                 for (int j=0;j<n;j++)
32                         if (i!=j && k!=i && k!=j && map[i][j]>map[i][k]+map[k][j])
33                             {
34                                 map[i][j]=map[i][k]+map[k][j];
35                             }
36 
37         
38         int ans=INF,ansb;
39         for (int i=0;i<n;i++)
40         {
41             bool reach=true;
42             int maxlen=-100;
43             for (int j=0;j<n && reach;j++)
44             {
45                 if (i!=j && map[i][j]==INF) reach=false;
46                 if (i!=j && map[i][j]>maxlen) maxlen=map[i][j];
47             }
48             if (reach && maxlen<ans)
49             {
50                 ans=maxlen;
51                 ansb=i;
52             }
53         }
54         if (ans==INF) cout<<"disjoint";else cout<<ansb+1<<' '<<ans;
55         cout<<endl;
56     }
57 
58     return 0;
59 }

 

转载于:https://www.cnblogs.com/iiyiyi/p/4698480.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值