继续畅通工程(Kruskal)
来源:互联网 发布:fps录像软件 编辑:程序博客网 时间:2024/06/09 08:16
继续畅通工程
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 25397 Accepted Submission(s): 10841
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年
Recommend
We have carefully selected several similar problems for you: 1875 1102 1301 1162 1198
这道题目的奇点在于处理数据,如果路已经建成,那么将费用清为零,然后就和Kruskal的算法是一样的~
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <algorithm>#define MAXN 12345using namespace std;int pre[MAXN];struct node{ int u, v, w;}t[MAXN];int root(int a){ while(a!=pre[a]) a = pre[a]; return a;}void merge(int a, int b){ int x = root(a); int y = root(b); if(x!=y) pre[x] = y;}int cmp(struct node a, struct node b){ return a.w<b.w;}int main(){ int n, flag; while(~scanf("%d", &n)&&n) { int m = n * (n-1) /2; for(int i=0;i<=n;i++) pre[i] = i; for(int i=0;i<m;i++) { scanf("%d %d %d %d", &t[i].u, &t[i].v, &t[i].w, &flag); if(flag==1)//如果已经建成,将费用改为0 t[i].w = 0; } sort(t, t+m, cmp); int ans = 0; for(int i=0;i<m;i++) { int x = root(t[i].u); int y = root(t[i].v); if(x!=y) { merge(t[i].u, t[i].v); ans += t[i].w; } } printf("%d\n", ans); } return 0;}
- 继续畅通工程(Kruskal)
- HDU1879:继续畅通工程【kruskal】
- HDU:1879 继续畅通工程(kruskal)
- hdu 1879 继续畅通工程(Kruskal)
- HDU 1879 继续畅通工程(kruskal,prim)
- HDUOJ 1879 继续畅通工程 kruskal算法
- HDU 1879 继续畅通工程(最小生成树 Kruskal算法)
- HDU 1879 继续畅通工程 最小生成树-Kruskal
- hdoj 继续畅通工程 Kruskal算法实现最小生成树
- HDU-#1879 继续畅通工程(Prim & Kruskal)
- hdu1879(Kruskal最小生成树)--继续畅通工程
- HDOJ 1879 继续畅通工程(最小生成树--kruskal)
- HDU 1879--继续畅通工程【kruskal && 最小生成树 && 水题】
- 杭电 1879 继续畅通工程【最小生成树&&Kruskal】
- HDOJ 1879 继续畅通工程 最小生成树 kruskal && prim
- 杭电-1879继续畅通工程(kruskal)
- 杭电-1879继续畅通工程(kruskal,prim)
- hdu1879 继续畅通工程 (kruskal求最小生成树)
- 【Kill】两条Linux命令彻底杀死Oracle
- 一致性哈希算法
- IO流(输入流和输出流)
- Java:对象流读取文本中的对象抛出EOFException的解决方法
- 写一个方法,判断一个字符串是否对称。比如: abcba就是一个对称字符串
- 继续畅通工程(Kruskal)
- c语言编译原理及IPC通信经典面试题
- AndroidStudio使用第三方jar包报错(Error: duplicate files during packaging of APK)
- CSS
- C++使用ODBC访问SqlServer
- Co-prime
- 转载:http://blog.csdn.net/u010128736/ ORB-SLAM2详解(六)闭环检测
- Unity中的Scroll Rect组件
- 垂直起降固定翼的学习大纲