5-10 公路村村通 (Kruskal+并查集)
来源:互联网 发布:windows phone 10微信 编辑:程序博客网 时间:2024/05/16 08:57
5-10 公路村村通 (30分)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
输入格式:
输入数据包括城镇数目正整数NN(\le 1000≤1000)和候选道路数目MM(\le 3N≤3N);随后的MM行对应MM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到NN编号。
输出格式:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出-1−1,表示需要建设更多公路。
输入样例:
6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3
输出样例:
12
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;int pre[1211];//记录祖先int n, m;int ans;int sum;struct node{ int x, y, w;}T[121211];int root(int a)//寻找祖先{ while(pre[a]!=a) a = pre[a]; return a;}int cmp(struct node a, struct node b){ return a.w<b.w;}void Kruskal(){ for(int i=0;i<m;i++) { int x = root(T[i].x); int y = root(T[i].y); if(x!=y)//如果祖先不相等,就合并 { ans += T[i].w;//记录费用 pre[x] = y; sum += 1;//节点+1 if(sum==n-1)//连接成图,跳出 return ; } }}int main(){ scanf("%d %d", &n, &m); for(int i=0;i<m;i++) { scanf("%d %d %d", &T[i].x, &T[i].y, &T[i].w); } sort(T, T+m, cmp); for(int i=1;i<=n;i++)//初始化 pre[i] = i; ans = 0; sum = 0; Kruskal(); if(sum==n-1)//节点恰好等于边数-1 printf("%d\n", ans);//输出费用 else printf("-1\n");//否则,-1 return 0;}
阅读全文
0 0
- 5-10 公路村村通 (Kruskal+并查集)
- 公路村村通 -并查集
- 5-10 公路村村通 (30分) prim Kruskal 算法
- SDUT 3362 数据结构实验之图论六:村村通公路(并查集)
- 5-10 公路村村通
- (最小生成树问题:Prim,Kruskal)村村通公路
- PAT 5-10 公路村村通 && HDU 1232 Kruskal 最小生成树
- 村村通(并查集)
- 5-10 公路村村通 (30分)
- 5-10 公路村村通 (30分)
- PTA 数据结构与算法题目集(中文)5-10 公路村村通 (30分)
- 村村通公路(Prim)
- ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)
- 06-图6. 公路村村通(30)--最小生成树-prime-kruskal
- (kruskal最小生成树)数据结构实验之图论六:村村通公路
- PAT--公路村村通--最小生成树--Kruskal算法
- 7-10 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- 清理软件CClearner
- 关系代数运算之连接
- udp服务器
- SQL注入之POST型常规注入
- <Linux>Ubuntu-gcc编译器无法编译sqrt函数和aqrtf函数的解决方法以及sqrt和aqrtf函数的区别
- 5-10 公路村村通 (Kruskal+并查集)
- java 百钱买百鸡
- 使用notepad++ 安装NppFTP 远程连接Linux
- JAVA排序,从小到大的Vector
- ubuntu下php的编译安装与部署
- maven-常用plugin备忘
- 共享经济其实很“自私”,区块链技术想给它一条出路
- Python6:oriented objective programming
- 使用反射调用一个类的方法