公路村村通 (30分)
来源:互联网 发布:python str datetime 编辑:程序博客网 时间:2024/04/27 13:20
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
输入格式:
输入数据包括城镇数目正整数NNN(≤1000\le 1000≤1000)和候选道路数目MMM(≤3N\le 3N≤3N);随后的MMM行对应MMM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到NNN编号。
输出格式:
输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1-1−1,表示需要建设更多公路。
输入样例:
6 151 2 51 3 31 4 71 5 41 6 22 3 42 4 62 5 22 6 63 4 63 5 13 6 14 5 104 6 85 6 3
输出样例:
12
#include<iostream>#include<vector>#include<cstdio>#include<algorithm>using namespace std;struct edge{int u,v,w;}e[10000];int f[30000];bool cmp(edge a,edge b){return a.w < b.w;}int getf(int v){if(f[v] == v) return v;else{f[v] = getf(f[v]);return f[v];}}bool merge(int x,int y){int m,n;m = getf(x);n = getf(y);if( m != n ){f[n] = m;return true;}return false;}void init(){for(int i = 1; i <=3000; i++) f[i] = i;}int main(){int n,m,sum = 0,count;cin>>n>>m;count = n;for(int i = 1; i <= m; i++)scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w);sort(e,e+m,cmp);init();for(int i =1; i <= m && count>1; i++){if(merge(e[i].u,e[i].v)){count--;sum = sum + e[i].w; }}if(count == 1) cout<<sum<<endl; else cout<<"-1"<<endl;return 0;}
1 0
- 公路村村通 (30分)
- 5-10 公路村村通 (30分)
- 5-10 公路村村通 (30分)
- 5-9 公路村村通 (30分)
- 公路村村通(30 分)
- 5-10 公路村村通 (30分) prim Kruskal 算法
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 08-图7 公路村村通 (30分)
- 公路村村通(30分) 最小生成树
- 7-10 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- 08-图7 公路村村通(30 分)
- 7-10 公路村村通(30 分)
- pta 08-图7 公路村村通 (30分) 最小生成树
- 5-4 公路村村通 (30分)【简单的最小生成树】
- 31. Next Permutation 冒泡排序应用
- Android MVP 详解(上)
- UITableView滑动,编辑内容消失
- MySQL密码忘记后的解决方法
- tomcat和http协议
- 公路村村通 (30分)
- hihocoder-#1082 : 然而沼跃鱼早就看穿了一切
- Perf -- Linux下的系统性能调优工具介绍
- [Guava]——MultiMap
- "No previous prototype for function" warning警告错误解决
- Servlet概述
- C#中用ILMerge将所有引用的DLL和exe文件打成一个exe文件(图解)
- nyoj488素数环
- 迷失的自我01