博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hrbust 1133 (kruskal)
阅读量:5458 次
发布时间:2019-06-15

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

#include 
#include
#include
#include
//bool cmp()int next[5000];int f[5000], t[5000];int r[5000], w[5000];int cmp(const void *p1, const void *p2){ return w[*(int*)p1] - w[*(int*)p2];}int find(int x){ return x == next[x] ? x : find(next[x]);}void findnext(int i, int j){ int x = find(i); int y = find(j); if (x != y) { if (x > y) { next[x] = y; } else next[y] = x; }}int kruskal(int m, int n){ int res = 0; for (int i=1; i<=n; i++) { next[i] = i; } for (int i=1; i<=m; i++) { r[i] = i; } qsort(r, m, sizeof(r[0]), cmp); for (int i=1; i<=m; i++) { int e = r[i]; int x = find(f[e]); int y = find(t[e]); if (x != y) { res += w[e]; findnext(x, y); } } return res;}int main(void){ int n; while (scanf("%d", &n), n) { int m = n * (n-1) / 2; for (int i=1; i<=m; i++) { scanf("%d%d%d", &f[i], &t[i], &w[i]); } printf("%d\n", kruskal(m, n)); } return 0;}

 

Description

既然大家都不愿意做水题,元帅也很无奈,想了好久也不知道什么是水题,因为在元帅的眼里都是水题,他定义的非水题就是他做不出来的题。太囧了,随便弄个水的MST。

Input

测试输入包含若干测试用例。每个测试用例的第1行给出顶点数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个顶点的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。

当N为0时,输入结束,该用例不被处理。

Output

对于每个测试用例,输出MST的最小路径总长度。

Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
 

转载于:https://www.cnblogs.com/bucuo/archive/2013/04/11/3015386.html

你可能感兴趣的文章
COLLATE Chinese_PRC_CI_AS
查看>>
PHP中面对过程的冗余是什么?
查看>>
函数----函数重载,特殊用途语言特性,函数匹配,函数指针
查看>>
Hive数据查询
查看>>
在vue2框架中,使用背景图片时,在build压缩代码环节图片找不到路径
查看>>
[转]android中最好的瀑布流控件PinterestLikeAdapterView
查看>>
算法面经之百度
查看>>
JavaWeb基础知识第三部分
查看>>
java并发编程系列一、多线程
查看>>
parseInt的源码阅读
查看>>
不定期更新的毒鸡汤
查看>>
OpenCV数字图像处理(1) 总记
查看>>
接口和类
查看>>
jfarme
查看>>
学习中的小笔记
查看>>
test
查看>>
LVS 负载均衡 keepalive
查看>>
The eleven Day
查看>>
HTTP 无法注册URL 进程不具有命名空间的访问权限
查看>>
spring 基于multipart 文件上传
查看>>