poj 2139
来源:互联网 发布:mac虚拟机win10激活 编辑:程序博客网 时间:2024/05/22 02:22
http://poj.org/problem?id=2139
题目好烂 再次吐槽 我都没看懂orz
n头奶牛,m部电影,每部电影告诉你是哪几头奶牛.如果两头奶牛在一起出演就相互度=1,如果两头奶牛没有一起出演过,但是同时跟第三头奶牛出演过,那么这两头奶牛的相互度就等于他们与第三头奶牛的相互度之和。要求输出牛的最小平均分开度的100倍。这题目也够难懂得。最坑爹的地方是没有给出输出的格式,不知道是进位还是去尾。
本题题意可以变换的理解为如果N个点在一个集合中,则这些点之间的距离为1。然后由此建立一个无向图。在这N个点中,每一个点与其他的所有点都有一个连接的路径长度,将这些长度都加起来,然后除以N-1,就求出了平均长度。题目所求为这些平均长度中的最小值,然后将最小值乘以100输出。
由于所有点到其他点的距离都要求,这个题用floyd算法最为合适,
using namespace std;const int N = 300;const int INF = 0x3f3f3f3f;int d[N+1][N+1];int n;void input(){ int m; cin >> n >> m; for (int i = 1; i <= n; i ++) fill(d[i]+1, d[i]+1+n, INF); while ( m-- ) { int k, movie[N]; cin >> k; for (int i = 0; i < k; i++) { scanf("%d", &movie[i]); } for (int i = 0; i < k; i++) { for (int j = i+1; j < k; j++) { d[movie[i]][movie[j]] = 1; d[movie[j]][movie[i]] = 1; } } }}void solve(){ for (int k = 1; k <= n; k ++) { for (int i = 1; i <= n; i ++) { for (int j = 1; j <= n; j ++) { d[i][j] = min(d[i][j], d[i][k]+d[k][j]); } } } int sum; int msum = INF; for (int i = 1; i <= n; i ++) { sum = 0; for (int j = 1; j <= n; j ++) { if (i == j) continue; sum += d[i][j]; } msum = (sum < msum) ? sum : msum; } double res = (double)msum / (n-1) * 100; printf("%d\n", (int)res);}int main(void){ input(); solve(); return 0;}
阅读全文
0 0
- 【POJ】2139
- poj 2139
- poj 2139 最短路
- poj 2139 flord水题
- poj 2139 floyd()
- poj 2139 floyd算法
- poj 2139 Floyd入门
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 论文翻译(转)
- CentOS安装OpenCV-2.4.13
- 关于升级14.1.0 build-7370693之后遇到的问题
- 输出学生成绩。本题要求编写程序,根据输入学生的成绩,统计并输出学生的平均成绩、最高成绩和最低成绩。建议使用动态内存分配来实现。
- candence17.2的pad editor
- poj 2139
- JSP中request.getParameterValues()方法的使用和获取
- 自己用java实现二叉树的增,删,查
- 补2017/12/22 IOC和DI的概述
- PX4uORB介绍[1]-常见IPC机制
- 2017.12.24
- TCP 结构体系
- 代码规范 : 抽象(ADT) 封装 与职责(3)
- Uva 11300 Spreading the Wealth