博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-1125 Stockbroker Grapevine 最短路
阅读量:5829 次
发布时间:2019-06-18

本文共 1353 字,大约阅读时间需要 4 分钟。

这题要处理的地方的就是一个人可以同时向多个人传递消息,也就是说一条消息的传递时间由最长的那一条路径所决定,因为可以同时进行嘛,所以就求某一点到所有点的最短路,然后再寻找一条最长的路劲,枚举每个顶点作为起点就可以了。

代码如下:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f#define LL long longusing namespace std;int N, G[105][105], dis[105], vis[105];bool Dijkstra(int s, int &ret) { int pos, Min; ret = 0; memset(dis, 0x3f, sizeof (dis)); memset(vis, 0, sizeof (vis)); dis[s] = 0; for (int i = 1; i <= N; ++i) { Min = inf; for (int j = 1; j <= N; ++j) { if (!vis[j] && Min > dis[j]) { pos = j, Min = dis[j]; } } if (Min == inf) { return false; } else { vis[pos] = 1; for (int j = 1; j <= N; ++j) { if (!vis[j] && G[pos][j] != inf && dis[j] > dis[pos] + G[pos][j]) { dis[j] = dis[pos] + G[pos][j]; } } } } for (int i = 1; i <= N; ++i) { ret = max(ret, dis[i]); } return true;}int main(){ int a, b, M, flag, Min, num, ret; while (scanf("%d", &N), N) { flag = 0; Min = inf; memset(G, 0x3f, sizeof (G)); for (int i = 1; i <= N; ++i) { scanf("%d", &M); for (int j = 1; j <= M; ++j) { scanf("%d %d", &a, &b); G[i][a] = b; } } for (int i = 1; i <= N; ++i) { int t; if (Dijkstra(i, t)) { flag = 1; if (Min > t) { Min = t, num = i; } } } if (!flag) puts("disjoint"); else printf("%d %d\n", num, Min); } return 0;}

 

转载地址:http://guodx.baihongyu.com/

你可能感兴趣的文章
Cisco Easy ×××综合配置示例
查看>>
日常运维shell命令(三)
查看>>
Android 的几种布局方式及实践
查看>>
nicstat的安装及使用
查看>>
Struts2中使用struts2标签访问静态方法
查看>>
现代浏览器的工作原理【一】
查看>>
打白条零现金购iPhone 6 白条粉的狂欢盛宴
查看>>
exchange2007无法收发信故障排除案例
查看>>
专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好
查看>>
开机前设置提示框
查看>>
eclipse项目发布问题
查看>>
Win10 开始运行不保存历史记录原因和解决方法
查看>>
1-1 操作系统做了什么?
查看>>
Unity3d v5.3+protoBuf
查看>>
c primer plus(第五版)读书笔计 第三章(2)
查看>>
String对象的经典问题
查看>>
一个门卫的故事
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Hibernate inverse和cascade的作用和区别
查看>>