题目大意:输入一个整数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. 常见http错误码

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...

  2. bzoj 1101

    其实这个用的是Mobius反演的第二种形式 F(d) = (n div d) * (m div d) f(d) = [ gcd(i,j)=d ] (i in [1,a], j in [1,b]) /* ...

  3. php上传中文文件文件名乱码问题

    php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码. 下面是问题代码,很简单: 1.问题代码 html部分: <html> &l ...

  4. JDK源码(1.7) -- java.util.Map<K,V>

     java.util.Map<K,V> 源码分析 --------------------------------------------------------------------- ...

  5. hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并

    Tunnel Warfare Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  6. Linux知识(4)----文件系统结构

    Ubantu 14.04的文件系统结构如下图所示: 参考资料: 1.http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.htm ...

  7. OC 导入类 #import和@class 区别复习

    objective-c中#import和@class的区别 在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forwar ...

  8. 深入Delphi下的DLL编程

    深入Delphi下的DLL编程 作者:岑心 引 言 相信有些计算机知识的朋友都应该听说过“DLL”.尤其是那些使用过windows操作系统的人,都应该有过多次重装系统的“悲惨”经历——无论再怎样小心, ...

  9. maven,阿里云国内镜像,提高jar包下载速度

    镜像 maven默认会从中央仓库下载jar包,这个仓库在国外,而且全世界的人都会从这里下载,所以下载速度肯定是非常慢的.镜像就相当于是中央仓库的一个副本,内容和中央仓库完全一样,目前有不少国内镜像,其 ...

  10. spring boot配置springMVC拦截器

    spring boot通过配置springMVC拦截器 配置拦截器比较简单, spring boot配置拦截器, 重写preHandle方法. 1.配置拦截器: 2重写方法 这样就实现了拦截器. 其中 ...