ACM-最小生成树之继续畅通工程——hdu1879
来源:互联网 发布:北京心知科技有限公司 编辑:程序博客网 时间:2024/05/22 00:20
***************************************转载请注明出处:http://blog.csdn.net/lttree***************************************
继续畅通工程
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12918 Accepted Submission(s): 5587
Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。
当N为0时输入结束。
当N为0时输入结束。
Output
每个测试用例的输出占一行,输出全省畅通需要的最低成本。
Sample Input
31 2 1 01 3 2 02 3 4 031 2 1 01 3 2 02 3 4 131 2 1 01 3 2 12 3 4 10
Sample Output
310
Author
ZJU
Source
浙大计算机研究生复试上机考试-2008年
继续畅通工程,最小生成树(MST)。
不说最小生成树,直接说MST,是不是显得高大上啊~
嘿嘿~~~
这道题,依旧是求最小生成树,比起赤裸裸加了几块布。
比如,有些路已经修建了。
已经修建的路就不需要耗费你任何东西,所以cost=0
没有告诉你边数有多少,
其实题目中说了 边数=n*(n-1)/2
剩下的,求MST吧~ ,我用的Kruskal求:
/********************************************************************************** Author:Tree **From :http://blog.csdn.net/lttree ** Title : 继续畅通工程 **Source: hdu 1879 ** Hint : 最小生成树(MST-Prim) **********************************************************************************/#include <stdio.h>#include <algorithm>using namespace std;struct Road{ int u,v,c;}r[10001];int n,m,father[10001];bool cmp(Road r1,Road r2){ return r1.c<r2.c;}// 并查集系列函数 1-初始化 2-查找 3-合并void Init( int n ){ int i; for(i=1;i<=n;++i) father[i]=i;}int Find(int m){ while( father[m]!=m ) { m=father[m]; } return m;}void Combine( int a,int b){ int temp_a,temp_b; temp_a=Find(a); temp_b=Find(b); if( temp_a!=temp_b ) father[temp_a]=temp_b;}int Kruskal( void ){ sort(r,r+m,cmp); Init(n); Road rd; int i,res; // 构建最小生成树 res=0; for( i=0;i<m;++i ) { rd=r[i]; if( Find(rd.u)!=Find(rd.v) ) { Combine(rd.u,rd.v); res+=rd.c; } } return res;}int main(){ int i,start,finish,cost,iscon; while( scanf("%d",&n) && n ) { // 求边的数量 m = n*(n-1)/2; for( i=0;i<m;++i ) { scanf("%d%d%d%d",&start,&finish,&cost,&iscon); r[i].u=start; r[i].v=finish; // 如果道路已经修建,消耗设置为0,不需要我们再去建立道路 if( iscon ) r[i].c=0; else r[i].c=cost; } printf("%d\n",Kruskal()); } return 0;}
0 0
- ACM-最小生成树之继续畅通工程——hdu1879
- Hdu1879 - 继续畅通工程 - 最小生成树
- hdu1879 继续畅通工程 最小生成树
- hdu1879 继续畅通工程 (最小生成树之prim 算法)
- 最小生成树 克丽丝卡尔算法 hdu1879 继续畅通工程
- hdu1879继续畅通工程 最小生成树prim算法
- hdu1879继续畅通工程 最小生成树prim算法
- hdu1879 继续畅通工程(最小生成树)
- HDU1879 继续畅通工程 【最小生成树Prim】
- hdu1879(Kruskal最小生成树)--继续畅通工程
- hdu1879 继续畅通工程(最小生成树、 并查集)
- hdu1879 继续畅通工程(最小生成树)
- hdu1879 继续畅通工程 (kruskal求最小生成树)
- HDU1879 继续畅通工程 【图论】【最小生成树】【Kruskal】
- ACM-最小生成树之畅通工程——hdu1863
- hdu1879继续畅通工程
- HDU1879继续畅通工程
- HDU1879--继续畅通工程
- 对一个字符串进行简单加密
- c++ primer Plus 第六版(中文) 编程练习3.7.6
- 20140526收盘小结
- 润乾——通用查询中使用参数和宏
- E4/CSS/SWT CSS 映射表
- ACM-最小生成树之继续畅通工程——hdu1879
- openerp通过Celery异步实时发送短信
- 新浪微薄分享一(授权)
- WIN7 64下JDK8环境变量设置
- c++ primer Plus 第六版(中文) 编程练习3.7.7
- 英语论文中常见的语法错误集锦
- 古董内存条
- mysql数据库不能处理中文字符问题
- 抽象公共类,复用公共方法为多个对象