HDoj-1863-畅通project-并查集
畅通project
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17006 Accepted Submission(s): 7140
Problem Description
省政府“畅通project”的目标是使全省不论什么两个村庄间都能够实现公路交通(但不一定有直接的公路相连,
仅仅要能间接通过公路可达就可以)。
经过调查评估,得到的统计表中列出了有可能建设公路的若干条道路的成本。
现请你编敲代码。计算出全省畅通须要的最低成本。
Input
測试输入包括若干測试用例。每一个測试用例的第1行给出评估的道路条数 N、村庄数目M ( < 100 );随后的 N
行相应村庄间道路的成本,每行给出一对正整数。各自是两个村庄的编号。以及此两村庄间道路的成本(也是正整数)。
为简单起见,村庄从1到M编号。
当N为0时,所有输入结束。对应的结果不要输出。
Output
对每一个測试用例,在1行里输出全省畅通须要的最低成本。
若统计数据不足以保证畅通,则输出“?
”。
Sample Input
3 3
1 2 1
1 3 2
2 3 4
1 3
2 3 2
0 100
Sample Output
3
?
#include <stdio.h>
#include<string.h>
#include <algorithm>
using namespace std;
struct Road
{
int c1, c2, cost;
};
Road road[110]; bool cmp(Road a,Road b)
{
return a.cost<b.cost;
}
int city[110]; int find(int a)
{
int r=a;
while(city[r]!=r)
r=city[r];
return r;
}
bool merge(int x, int y)
{
int fx,fy;
fx = find(x);
fy = find(y);
if(fx == fy) return 0;
else if(fx < fy)
city[fy] = fx;
else
city[fx] = fy;
return 1;
} int main()
{
int n, m;
while(scanf("%d %d", &m, &n) && m)
{
int i;
for(i=1;i<=n;i++)
{
city[i]=i;
}
for(int i=0; i<m; ++i)
scanf("%d %d %d", &road[i].c1, &road[i].c2, &road[i].cost);
sort(road, road+m,cmp);
int sum = 0, count = 0;
for(int i=0; i<m; i++)
{
if(merge(road[i].c1, road[i].c2))
{
count ++;
sum += road[i].cost;
}
if(count == n-1)
break;
}
if(count == n-1)
printf("%d\n", sum);
else
printf("? \n");
}
return 0;
}
HDoj-1863-畅通project-并查集的更多相关文章
- hdu 1863 畅通工程 (并查集+最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 畅通工程 Time Limit: 1000/1000 MS (Java/Others) M ...
- HDU1232 畅通project 并查集
这道题跟HDU 1213 How Many Tables 并查集很接近,都是赤裸裸的并查集的题. 思路:如果还须要建n-1条路.每并一次就自减1. 參考代码: #include<stdio.h& ...
- hdu 1863 畅通工程 (并查集 、 kruskal)
畅通工程Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Kruskal HDOJ 1863 畅通工程
题目传送门 /* 此题为:HDOJ 1233 + HDOJ 1232 */ #include <cstdio> #include <algorithm> #include &l ...
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
本题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1863 Problem Description: 省政府“畅通工程”的目标是使全省任何两个村庄间都可以 ...
- HDU1232 畅通工程 并查集
畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- ACM: 继续畅通工程-并查集-最小生成树-解题报告
继续畅通工程 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Descri ...
- ACM: 畅通工程-并查集-解题报告
畅通工程 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 某省调查城镇交通状况 ...
- hdoj 1863 畅通工程
并查集+最小生成树 畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- B - 畅通工程(并查集)
对并查集理解之后就可以做这种题了,虽说这种题做的不多,这道题做过才这么快搞定,可是还是挺happy滴,加油 Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接 ...
随机推荐
- 深入理解python中的select模块
简介 Python中的select模块专注于I/O多路复用,提供了select poll epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kque ...
- 80X86指令总结
一.数据传送指令 指令名称 汇编语句格式 功能 影响标志位 传送move data mov opd, ops (ops) → opd:分为主存储器.通用寄存器.段寄存器,不可同时使用主存储器,类型要匹 ...
- [CodeVS1243]网络提速
题目大意: 有n个点的连通图,有m次可以将某一条边权值减半的机会. 不同的机会可以叠加作用于同一条边. 求1~n的最短路. 思路: 拆点,记录1到每个点在使用不同次数的机会后的最短路,然后直接跑Dij ...
- bzoj 1337 最小圆覆盖
/************************************************************** Problem: 1337 User: idy002 Language: ...
- POJ 1321 棋盘问题 DFS 期末前水一水就好……
A - 棋盘问题 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- PAT甲级1114. Family Property
PAT甲级1114. Family Property 题意: 这一次,你应该帮我们收集家族财产的数据.鉴于每个人的家庭成员和他/她自己的名字的房地产(房产)信息,我们需要知道每个家庭的规模,以及他们的 ...
- Node.js学习笔记(3) - 简单的curd
这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简 ...
- SPOJ 3267. D-query (主席树,查询区间有多少个不相同的数)
3267. D-query Problem code: DQUERY English Vietnamese Given a sequence of n numbers a1, a2, ..., an ...
- linux内核源码中常见宏定义
http://blog.csdn.net/yangdelong/article/details/5508057
- cloudstack openstack zstack
http://www.cnblogs.com/skyme/archive/2013/06/06/3118852.html http://www.niubua.com/ http://zstack.or ...