(step6.1.1)hdu 1879(继续畅通工程——最小生成树、kruscal)
题目大意:输入一个整数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)的更多相关文章
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- (step6.1.5)hdu 1233(还是畅通工程——最小生成树)
题目大意:输入一个整数n,表示有n个村庄,在接下来的n*(n-1)/2中,每行有3个整数beigin.end.weight,分别表示路的起始村庄,结束村庄和村庄之间的距离. 求索要修的路的最短距离 解 ...
- HDU 1879 继续畅通工程(Prim||Kruscal模板题)
原题链接 Prim(点归并) //异或运算:相同为假,不同为真 #include<cstdio> #include<algorithm> #define maxn 105 us ...
- hdu 1879 继续畅通工程
/************************************************************************/ /* hdu 1879 继续畅通工程 Time L ...
- hdu 1879 继续畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1879 继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 1879 继续通畅工程(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1879 继续畅通工程(最小生成树)
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经 ...
- HDU 1879 继续畅通工程(Kruskra)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
随机推荐
- 「POI2011 R1」Conspiracy
「POI2011 R1」Conspiracy 解题思路 : 问题转化为,将点集分成两部分,其中一部分恰好组成一个团,其中另一部分恰好组成一个独立集. 观察发现,如果求出了一个解,那么答案最多可以在这个 ...
- uoj22 【UR #1】外星人
link 题意: 给一个长为n的序列a[],现在有一个初始值m,问一个1~n的排列p[],满足将m对a[p[i]]顺次取模后得到的值最大,输出最大值和方案数. $n,m\leq 5\times 10^ ...
- bzoj 1015 维护连通块个数,离线并查集
水. /************************************************************** Problem: 1015 User: idy002 Langua ...
- Codeforces Round #245 (Div. 2) B. Balls Game 并查集
B. Balls Game Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/430/problem ...
- ios/object-c中的UIColor一些比较偏的颜色展示/示例
UIColor blackColor]; [UIColor darkGrayColor]; [UIColor lightGrayColor]; [UIColor grayColor]; [UIColo ...
- API & HTTP 请求调试:Postman
参考: Postman 是一个非常棒的Chrome扩展,提供功能强大的API & HTTP 请求调试. 它能够发送任何类型的HTTP requests (GET, HEAD, POST, PU ...
- MySQL MERGE存储引擎 简介
MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...
- 【maven】maven命令 package、install、deploy 的区别
maven命令 package.install.deploy 的区别
- easyui datagrid 表格适应屏幕
1.项目后台系统使用easyui,datagrid 的数据设置为自动适应屏幕,那么对于笔记本的话,就会显得有的小,可以通过设置datagrid属性,进行固定长度的设置 $('#gridTable'). ...
- C99规范
. 增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借助restrict指针表达式才能访问对象.restrict指针指针主 ...