poj 1125 Stockbroker Grapevine 【最短路 Floyd】
2015-10-31 17:31
288 查看
[align=center]Stockbroker Grapevine[/align]
题目大意:给你n个人的联系情况,对任意一个人,求出这个人发消息到其他n-1个人的时间,得到n-1个时间中的最大值,n个最大值中的最小值就是所求。如果网络不通,那就输出disjoint。
本题用Floyd更简洁
已Accept代码【c++】
[align=center]Stockbroker Grapevine[/align]
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 31794 | Accepted: 17420 |
本题用Floyd更简洁
已Accept代码【c++】
<table width="100%" class="a" bordercolor="#ffffff" border="1" cellspacing="0" cellpadding="0"><tbody><tr align="center"><td><a target=_blank href="http://poj.org/problem?id=1125"><span style="color:#0000ff;">1125</span></a></td><td><span style="color:blue;">Accepted</span></td><td>140K</td><td>0MS</td><td>C++</td><td>923B</td></tr></tbody></table>
#include <cstdio> #include <cstring> using namespace std; int map[101][101]; int n, m; void Floyd() { int v = 0; for(int k = 1; k <= n; k++) for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) map[i][j] = map[i][j] > map[i][k] +map[k][j] ? map[i][k] + map[k][j] : map[i][j]; int Min = 100000; for(int i = 1; i <= n; i++) { int Max = -1; for(int j = 1; j <= n; j++) if(Max < map[i][j]) Max = map[i][j]; if(Max < Min) { Min = Max; v = i; } } if(Min < 100000) printf("%d %d\n", v, Min); else printf("disjoint\n"); } int main() { int a, b; 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] = 100000; } } for(int i = 1; i <= n; i++) { scanf("%d", &m); for(int j = 0; j < m; j++) { scanf("%d %d", &a, &b); map[i][a] = b; } } Floyd(); } return 0; }
相关文章推荐
- 几种字符串搜索算法(也就是模式匹配)的分析
- iOS常用框架
- JavaScript之模块化编程
- 设计模式之二:策略模式
- 影响股市的因素
- [python和大数据-1]利用爬虫登录知乎进行BFS搜索抓取用户信息本地mysql分析【PART1】
- 计算机集群
- Android中ImageView的ScaleType设置
- XML转array
- Java中数的机器码表示与位运算
- M3:不要对数组使用多态
- PySqlite 开发中的应用
- <s:fielderror>标签指定要显示字段的信息显示
- JNI转换接口
- LeetCode Longest Common Prefix
- IOS开发基础Object-C(03)—点语法
- 插入排序
- Android视图绘制流程完全解析(二)
- C++进阶之路
- gradle构建依赖