九度oj 1017
来源:互联网 发布:三星高通9008端口救砖 编辑:程序博客网 时间:2024/06/11 18:08
- 题目描述:
- 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
- 输入:
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
- 输出:
对每个测试用例,在1行里输出最小的公路总长度。
- 样例输入:
31 2 11 3 22 3 441 2 11 3 41 4 12 3 32 4 23 4 50
- 样例输出:
35
- 来源:
2006年浙江大学计算机及软件工程研究生机试真题
#include<iostream>#include<string.h>#include<algorithm>using namespace std;#define N 101int tree[N];int findroot(int x){ if(tree[x]==-1) return x; else return findroot(tree[x]);}struct edge{ int a,b; int cost; bool operator< (const edge &a)const { return cost<a.cost; } }edge[6000]; int main(){ int n; while(cin>>n&&n!=0) { for(int i=1;i<=n*(n-1)/2;i++) { cin>>edge[i].a>>edge[i].b>>edge[i].cost; } sort(edge+1,edge+1+n*(n-1)/2); for(int i=1;i<=n;i++) tree[i]=-1; int ans=0; for(int i=1;i<=n*(n-1)/2;i++) { int a=findroot(edge[i].a); int b=findroot(edge[i].b); if(a!=b) { tree[a]=b; ans+=edge[i].cost; } } cout<<ans<<endl; } }
0 0
- 九度oj 1017
- 九度OJ 1017
- 【九度OJ】:九度OJ 1050
- 【九度OJ】:九度OJ 1053
- 【九度OJ】:九度OJ 1056
- 【九度OJ】:九度OJ 1059
- 【九度OJ】:九度OJ 1206
- 九度OJ-1017:还是畅通工程
- 九度OJ:1000
- 【九度OJ】 1006
- 九度 OJ 1499
- 九度OJ-1002
- 九度OJ-1003
- 九度OJ 1004
- 九度OJ 1003
- 九度oj 采药
- 九度OJ 1001
- 九度OJ 1015
- 分布式程序防止多用户对同一数据更新问题
- POJ 2253 Frogger (dijkstra)
- c++ primer Exercise 5.0
- 内部类
- 反射invoke方法之我见
- 九度oj 1017
- 美轮美奂宇宙星空制作神器Spacescape
- UVa 10913 - Walking on a Grid(dp递推变形)
- Android Studio——Gradle 版本回退
- (一〇二)静态库(.a)的打包
- 20150802-集合
- Socket通信之客户端和服务器对话
- 在 Linux 下安装基于 Python 的机器学习编程环境
- 使用WebRTC搭建前端视频聊天室-01——入门篇