题目大意:输入一个整数n,表示有n个村庄。在接下来的n(n-1)/2行中,每行有4个整数begin  end  weight  flag。分别表示从begin到end之间可以连通

,他们之间的费用为weight,flag表示这条路是否已经修好。求修路让所有村庄都连起来的最小费用

解题思路:最小生成树

代码如下:

/*
* 1879_4.cpp
*
* Created on: 2013年8月25日
* Author: Administrator
*/ #include <iostream>
using namespace std; const int maxn = 110;
int father[110000];//注意这里不要只开到father[110],否则会WA struct edge{
int begin;
int end;
int weight;
}; edge e[maxn*maxn];//因为m的取值是n(n-1)/2,所以他应该是maxn*maxn的形式
int n; bool compare(const edge& a , const edge& b){
return a.weight < b.weight;
} int find_set(int x){
if( x == father[x]){
return x;
} father[x] = find_set(father[x]);
return father[x];
} void kruskal(){
int i;
int sum = 0; //初始化
for(i = 1 ; i <= n ;++i){
father[i] = i;
} //合并
for(i = 1 ; i <= n ; ++i){
int fx = find_set(e[i].begin);
int fy = find_set(e[i].end); if(fx != fy){
father[fx] = fy;
sum += e[i].weight;
}
} printf("%d\n",sum);
} void init(){
int i,t;
for( i = 1 ; i <= n ; ++i){
scanf("%d%d%d%d",&e[i].begin,&e[i].end,&e[i].weight,&t); if(t){
e[i].weight = 0;
}
}
} int main(){
while(scanf("%d",&n)!=EOF,n){
// 这种写法会WA
// int m = n*(n - 1)/2;
//
// int i;
// for( i = 1 ; i <= m ; ++i){
// int flag ;
// scanf("%d%d%d%d",&e[i].begin,&e[i].end,&e[i].weight,&flag);
//
// if(flag){
// e[i].weight = 0;
// }
// } n = n*( n - 1)/2;
init();
sort(e + 1,e + n + 1 , compare); kruskal();
}
}

(step6.1.1)hdu 1879(继续畅通工程——最小生成树、kruscal)的更多相关文章

  1. hdu 1879 继续畅通工程 (最小生成树)

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  2. (step6.1.5)hdu 1233(还是畅通工程——最小生成树)

    题目大意:输入一个整数n,表示有n个村庄,在接下来的n*(n-1)/2中,每行有3个整数beigin.end.weight,分别表示路的起始村庄,结束村庄和村庄之间的距离. 求索要修的路的最短距离 解 ...

  3. HDU 1879 继续畅通工程(Prim||Kruscal模板题)

    原题链接 Prim(点归并) //异或运算:相同为假,不同为真 #include<cstdio> #include<algorithm> #define maxn 105 us ...

  4. hdu 1879 继续畅通工程

    /************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...

  5. hdu 1879 继续畅通工程 (并查集+最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    ...

  6. hdu 1879 继续通畅工程(最小生成树)

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

  7. HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. HDU 1879 继续畅通工程(最小生成树)

    省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经 ...

  9. HDU 1879 继续畅通工程(Kruskra)

    继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

随机推荐

  1. socketserver用法列子

    socketserver socketserver内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的scoket服务端.即,每个客户端请求连接到服务器时,socket服务 ...

  2. 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘

    如果你是一个生活在2003年的程序员,却不了解字符.字符集.编码和Unicode这些基础知识.那你可要小心了,要是被我抓到你,我会让你在潜水艇里剥六个月洋葱来惩罚你. 这个邪恶的恐吓是Joel Spo ...

  3. Python入门基础知识(1) :locals() 和globals()

    Python有两个内置的函数,locals() 和globals(),它们提供了基于字典的访问局部和全局变量的方式. 首先,是关于名字空间的一个名词解释.是枯燥,但是很重要,所以要耐心些.Python ...

  4. FastReport.Net使用:[29]调用存储过程1

    1.创建存储过程sp_querycourse,用于查询学生成绩. 2.在FastReport.Net报表设计器中,通过 数据-->添加数据源 来打开数据向导. 选择数据源,添加数据连接. 3.在 ...

  5. BNU校赛总决赛J 小白兔小灰兔 相交计算几何模板

    J 小白兔小灰兔 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K Special Judge, 64bit IO Format: %lld 题目描述 ...

  6. [COGS2426][HZOI 2016]几何

    [COGS2426][HZOI 2016]几何 题目大意: 给定平面坐标系内\(n\)个整点,求这些整点能构成的正多边形的边数的最大值. 思路: 一个基本结论:平面直角坐标系内能够形成的正多边形一定是 ...

  7. bzoj1393 旅游航道

    Description SGOI旅游局在SG-III星团开设了旅游业务,每天有数以万计的地球人来这里观光,包括联合国秘书长,各国总统和SGOI总局局长等.旅游线路四通八达,每天都有总躲得载客太空飞船在 ...

  8. CDOJ 1294 天行廖的游戏 dp 容斥

    天行廖的游戏 题目连接: http://acm.uestc.edu.cn/#/problem/show/1294 Description 天行健,君子以自强不息.地势坤,廖爷以厚德载物 一日在喵哈哈村 ...

  9. 使用Mysql慢查询日志对有效率问题的SQL进行监控

    输入命令:show variables like 'slow%' 可以发现 slow_query_log 为 OFF(默认),表示未开启慢查询日志 slow_query_log_file 为慢查询日志 ...

  10. centos安装openssl

    1.跳转到文件下载目录 cd install-file 2.下载openssl安装文件 wget http://www.openssl.org/source/openssl-1.0.2a.tar.gz ...