还是畅通工程(克鲁斯卡尔算法)
来源:互联网 发布:下载淘宝网到电脑桌面 编辑:程序博客网 时间:2024/04/30 11:33
Problem Link:点击打开链接
题目描述
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。
输入描述:
测试输入包含若干测试用例。每个测试用例的第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
AC code:
#include<iostream>#include<algorithm>#include<stdio.h>#include<map>#include<math.h>#include<string.h>#include<queue>#include<vector>#include<set>#define LL long long#define exp 1e-9#define MAXN 1000010 using namespace std;struct Road{int u,v;int cost;}road[5010];bool cmp(Road a,Road b){return a.cost<b.cost;}int N,M,sum,cnt;int fa[111];void init(){int i;for(i=1;i<=N;i++){fa[i]=i;}}int fin(int r){int tmp,son;son=r;while(r!=fa[r])r=fa[r];while(r!=tmp){tmp=fa[son];fa[son]=r;son=tmp;}return r;}bool join(int r1,int r2){int x,y;x=fin(r1);y=fin(r2);if(x!=y){if(x>y){fa[x]=y;}else{fa[y]=x;}return true;}return false;}void Kruscal(){int i;sum=0;sort(road+1,road+cnt+1,cmp);for(i=1;i<=cnt;i++){if(join(road[i].u,road[i].v)){sum+=road[i].cost;}}}int main( ) { //freopen("D:\\in.txt","r",stdin); int i,u,v,cost,state;while(scanf("%d",&N)!=EOF) { if(N==0) break; M=N*(N-1)/2; init(); cnt=0; for(i=1;i<=M;i++) { scanf("%d%d%d",&u,&v,&cost);road[++cnt].u=u;road[cnt].v=v;road[cnt].cost=cost;}Kruscal();printf("%d\n",sum);} return 0; }
0 0
- 还是畅通工程(克鲁斯卡尔算法)
- 畅通工程(克鲁斯卡尔算法)
- Hdu1233 step6.1.4还是畅通工程(克鲁斯卡尔)
- 杭电 1233 还是畅通工程(克鲁斯卡尔)
- HDU 1233还是畅通工程——克鲁斯卡尔算法(带并查集)
- 继续畅通工程(克鲁斯卡尔算法变形)
- hdu 1233(还是畅通工程)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)
- hdu 1233 还是畅通工程 (克鲁斯卡尔裸题)
- Num 32 : HDOJ : 1233 还是畅通工程 [ kruskal( 克鲁斯卡尔 )算法 ] [ 最小生成树 ]
- HUD OJ 1232 畅通工程 和 HDU OJ 1233还是畅通工程【并查集和克鲁斯卡尔算法】
- HDU 1233 还是畅通工程 (克鲁斯卡尔_最小生成树+贪心)
- HDU-1233-还是畅通工程(最小生成树 克鲁斯卡尔)
- HDU——1233还是畅通工程(克鲁斯卡尔+优先队列)
- HDOJ 1863 畅通工程——克鲁斯卡尔算法
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
- 【hdu 1863】畅通工程(最小生成树&克鲁斯卡尔算法模板)
- Hdu1232 step6.1.3畅通工程(克鲁斯卡尔)
- Step6.1.5 hdu1879继续畅通工程(克鲁斯卡尔)
- [Codeforces 496D] Tennis Game (筛法复杂度)
- centos 6 安装rrdtool
- 项目部署到服务器
- resiprocate使用入门:内网搭建基于repro的sipproxy测试环境
- x86—EFLAGS寄存器详解
- 还是畅通工程(克鲁斯卡尔算法)
- 你真的了解word-wrap和word-break的区别吗?
- 线程创建
- seq 命令
- 单个数码管
- 2017/1/19
- 问题五十九:怎么求一元六次方程在区间内的所有不相等的实根(3)——修正一个问题
- vs环境配置属性介绍
- Android 多文件上传