poj 2139 floyd()
来源:互联网 发布:java 线程怎么实线的 编辑:程序博客网 时间:2024/06/04 18:52
题意:
给定一些牛的关系,他们之间的距离为1。
然后求当前这只牛到每只牛的最短路的和,除以 n - 1只牛的最大值。
解析:
floyd来求最短路。
然后枚举求max就行了。
代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long long#define lson lo, mi, rt << 1#define rson mi + 1, hi, rt << 1 | 1using namespace std;const int maxn = 300 + 10;const int inf = 0x3f3f3f3f;const double eps = 1e-8;const double pi = acos(-1.0);const double ee = exp(1.0);int n, m;int g[maxn][maxn];int x[maxn];void floyd(){ for (int k = 0; k < n; k++) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { g[i][j] = min(g[i][j], g[i][k] + g[k][j]); } } }}int main(){#ifdef LOCAL freopen("in.txt", "r", stdin);#endif // LOCAL while (~scanf("%d%d", &n, &m)) { memset(g, inf, sizeof(g)); for (int i = 0; i < n; i++) g[i][i] = 0; while (m--) { int num; scanf("%d", &num); for (int i = 0; i < num; i++) { scanf("%d", &x[i]); x[i]--; } for (int i = 0; i < num; i++) { for (int j = i + 1; j < num; j++) { g[x[i]][x[j]] = g[x[j]][x[i]] = 1; } } } floyd(); int ans = inf; for (int i = 0; i < n; i++) { int sum = 0; for (int j = 0; j < n; j++) { sum += g[i][j]; } ans = min(sum, ans); } printf("%d\n", 100 * ans / (n - 1)); } return 0;}
0 0
- poj 2139 floyd()
- poj 2139 floyd算法
- poj 2139 Floyd入门
- poj 1125(floyd)
- POJ 1125(Floyd)
- POJ 3660(floyd)
- poj 3613(floyd倍增)
- poj 2240 floyd(货币)
- poj 1847(floyd) Tram
- POJ 2240 Arbitrage(Floyd)
- POJ 2253 Frogger (Floyd)
- poj 2240 Arbitrage (Floyd)
- POJ 2253 Frogger(Floyd)
- POJ 2240 Arbitrage(Floyd)
- POJ 2240 Arbitrage( floyd)
- POJ -- 2240 Arbitrage (Floyd‘)
- POJ 2240 Arbitrage (Floyd)
- POJ - 2240 Arbitrage(Floyd)
- COJ 1204: Rectangles
- Service中传递自定义类的问题分析
- GRE写作必备句型
- Java关键字final、static使用总结
- linux文件基本操作(2)
- poj 2139 floyd()
- c++中的重载
- 小型项目总结之三
- UNITY3D学习笔记2
- Android中下载文件并保存到SD卡
- HDU 2050 折线分割平面
- 页面传值JS解析
- 史上最全的Linux常用命令
- 杭电 2005 第几天?