版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/lx417147512/article/details/27092583

***************************************转载请注明出处:http://blog.csdn.net/lttree***************************************

继续畅通project

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 12918    Accepted Submission(s): 5587

Problem Description
省政府“畅通project”的目标是使全省不论什么两个村庄间都能够实现公路交通(但不一定有直接的公路相连,仅仅要能间接通过公路可达就可以)。现得到城镇道路统计表,表中列出了随意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编敲代码,计算出全省畅通须要的最低成本。
 

Input
測试输入包括若干測试用例。每一个測试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行相应村庄间道路的成本及修建状态,每行给4个正整数。各自是两个村庄的编号(从1编号到N)。此两村庄间道路的成本。以及修建状态:1表示已建,0表示未建。

当N为0时输入结束。

 

Output
每一个測试用例的输出占一行,输出全省畅通须要的最低成本。
 

Sample Input

3
1 2 1 0
1 3 2 0
2 3 4 0
3
1 2 1 0
1 3 2 0
2 3 4 1
3
1 2 1 0
1 3 2 1
2 3 4 1
0
 

Sample Output

3
1
0
 

Author
ZJU
 

Source
 

题目:

pid=1879" rel="nofollow">http://acm.hdu.edu.cn/showproblem.php?pid=1879

继续畅通project,最小生成树(MST)。

不说最小生成树,直接说MST,是不是显得高大上啊~

嘿嘿~~~
这道题,依然是求最小生成树。比起赤裸裸加了几块布。
比方,有些路已经修建了。
已经修建的路就不须要耗费你不论什么东西,所以cost=0
没有告诉你边数有多少。
事实上题目中说了 边数=n*(n-1)/2
剩下的,求MST吧~ 。我用的Kruskal求:
/****************************************
*****************************************
* Author:Tree *
*From :http://blog.csdn.net/lttree *
* Title : 继续畅通project *
*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;
}

ACM-最小生成树之继续畅通project——hdu1879的更多相关文章

  1. hdu1879 继续畅通project(最小生成树)

    继续畅通project Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  2. HDU1863 畅通project 【最小生成树Prim】

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. HDU 1863 畅通project (最小生成树是否存在)

    题意 中文 入门最小生成树  prim大法好 #include<cstdio> #include<cstring> using namespace std; const int ...

  4. hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)

    还是畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  5. 8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)

    题目链接:http://pat.zju.edu.cn/contests/ds/8-06 某地区经过对城镇交通状况的调查.得到现有城镇间高速道路的统计数据,并提出"畅通project" ...

  6. hdu1863 畅通project(判定最小生成树)

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. hdu 1875 畅通project再续(kruskal算法计算最小生成树)

    畅通project再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  8. hdu 1233 还是畅通project(kruskal求最小生成树)

    还是畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  9. hdoj 1875 畅通project再续【最小生成树 kruskal &amp;&amp; prim】

    畅通project再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其它的小岛时都要通过划小船来实现. ...

随机推荐

  1. 载入本地Html文件

    NSString * resousePath = [[NSBundle mainBundle]resourcePath];         NSString * filePath = [resouse ...

  2. Linux学习笔记 (三)Vi文本编辑器

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  3. python 奇技淫巧

    列表内部的字典的value进行排序 li = [{a:1,b:2,c:3,d:4},{e:5,f:6,g:7,h:8}] li = [{"day":2},{"day&qu ...

  4. python 第一个web程序

    yum install python-setuptools easy_install pip pip install tornado yum install MySQL-python test.py里 ...

  5. mongoDB DOS窗口显示中文

    http://zhidao.baidu.com/question/157276582 由于mongodb后台的字符编码都是utf-8的,而中文windows cmd窗口使用的字符编码是GBK(属性-& ...

  6. smali语法高亮相关链接

    http://ruby-china.org/topics/8307 http://www.daqianduan.com/4820.html http://www.cnblogs.com/ruochen ...

  7. 实现Tab功能

    网上实现Tab功能的方法有很多,这里我使用Fragment的方法,我觉着比较简单易懂 MainActivity private android.app.FragmentManager fragment ...

  8. Android NDK开发篇(四):Java与原生代码通信(原生方法声明与定义与数据类型)

    Java与原生代码通信涉及到原生方法声明与定义.数据类型.引用数据类型操作.NIO操作.訪问域.异常处理.原生线程 1.原生方法声明与定义 关于原生方法的声明与定义在上一篇已经讲一点了,这次具体分析一 ...

  9. zabbix api创建screen vsize限制解决

    通过脚本调用zabbix api 生成screen报错: "vsize": must be between "1" and "100" 查看 ...

  10. 使用putty从linux主机上面往windows主机下面拷贝文件

    更新一下,把putty的包解压以后,想要在dos窗口中直接使用,必须把putty解压的文件的路径添加到环境变量中,这样使用起来就会非常简单了. 郁闷了好久,终于搞定了putty的上传下载文件命令psc ...