ACM-最小生成树之继续畅通工程——hdu1879

***************************************转载请注明出处: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时输入结束。
 

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
浙大计算机研究生复试上机考试-2008年
 

题目: http://acm.hdu.edu.cn/showproblem.php?pid=1879


继续畅通工程,最小生成树(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 
#include 
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


你可能感兴趣的:(ACM-数据结构,漫漫刷题路)