hdu 1233 还是畅通工程 (克鲁斯卡尔裸题)
2015-08-14 23:12
411 查看
还是畅通工程
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32795 Accepted Submission(s): 14769
[align=left]Problem Description[/align]
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
[align=left]Input[/align]
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。
当N为0时,输入结束,该用例不被处理。
[align=left]Output[/align]
对每个测试用例,在1行里输出最小的公路总长度。
[align=left]Sample Input[/align]
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
[align=left]Sample Output[/align]
3 5 Huge input, scanf is recommended.
[align=left]Source[/align]
浙大计算机研究生复试上机考试-2006年
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1233
解题思路:裸的最小生成树,克鲁斯卡尔,边权值排序。
代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define inf 1e9 const int maxn=10005; int fa[maxn]; struct EG { int x,y,w; }eg[maxn]; void get_fa() { for(int i=0;i<=maxn;i++) fa[i]=i; } int find(int x) { return x==fa[x]?x:find(fa[x]); } void Union(int a,int b) { int a1=find(a); int b1=find(b); if(a1!=b1) fa[a1]=b1; } int cmp(EG a,EG b) { return a.w<b.w; } int main(void) { int a,b,w,n; while(scanf("%d",&n)!=EOF&&n) { get_fa(); int m=(n*(n-1))/2,ans=0; for(int i=0;i<m;i++) scanf("%d%d%d",&eg[i].x,&eg[i].y,&eg[i].w); sort(eg,eg+m,cmp); for(int i=0;i<m;i++) { if(find(eg[i].x)!=find(eg[i].y)) { Union(eg[i].x,eg[i].y); ans+=eg[i].w; } } printf("%d\n",ans); } }
相关文章推荐
- BZOJ2973 : 石头游戏
- I/O多路复用之-epoll
- 九度 Online Judge 算法 刷题 题目1095:2的幂次方
- 杭州电子科技大学acm-2001
- Tomcat Web
- HDU 2795 Billboard (线段树 单点更新, 询问位置)
- I/O多路复用之poll
- 供应商信息一览
- 贪心算法New Year BonusGrant
- JavaEE细节问题01——访问web资源的相对路径和绝对路径
- LinearLayout 和 RelativeLayout
- 九度 Online Judge 算法 刷题 题目1089:数字反转
- css水平居中那点事
- HDU5380 Travel with candy
- 动态规划
- hdu1285(拓扑排序)
- 九度 Online Judge 算法 刷题 题目1087:约数的个数
- ANT介绍及ANT系统环境变量的配置
- RPC与REST的区别
- 【JS】<a>标签调用js中函数的几种方法