畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 55552    Accepted Submission(s): 29588


Problem Description
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
 

Input
测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。 
 

Output
对每个测试用例,在1行里输出最少还需要建设的道路数目。
 

Sample Input
4 2
1 3
3 3
4 3
1 2
5 2
1 3
2 3
1 2
0
3 5
999 0
 

Sample Output
1
0
998
2
Hint
Hint
Huge input, scanf is recommended.
 

Source
Problem : 1232 ( 畅通工程 )     Judge Status : Accepted

RunId : 21246972    Language : G++    Author : hnustwanghe

Code Render Status : Rendered By HDOJ G++ Code Render Version 0.01 Beta

#include<iostream>
#include<cstdio>

using namespace std;
const int N = 1000 + 5;
int pre[N];
int Find(int x){
return pre[x]==x?x:(pre[x]=Find(pre[x]));
}
bool Merge(int x,int y){
x = Find(x),y = Find(y);
if(x!=y) pre[x] = y;
return x!=y?true:false;
}
int main(){
int n,m,from,to;
while(scanf("%d %d",&n,&m)==2 && n){
for(int i=0;i<N;i++) pre[i] = i;
for(int i=0;i<m;i++) {
scanf("%d %d",&from,&to);
Merge(from,to);
}
int ans = -1;
for(int i=1;i<=n;i++) if(pre[i]==i) ans++;
printf("%d\n",ans);
}
}

#include<iostream>
#include<cstdio>

using namespace
std;
const int
N = 1000 + 5;
int
pre[N];
int
Find(int x){
return
pre[x]==x?x:(pre[x]=Find(pre[x]));
}
bool
Merge(int x,int y){
x = Find(x),y = Find(y);
if(
x!=y) pre[x] = y;
return
x!=y?true:false;
}
int main(){
int
n,m,from,to;
while(
scanf("%d %d",&n,&m)==2 && n){
for(int
i=0;i<N;i++) pre[i] = i;
for(int
i=0;i<m;i++) {
scanf("%d %d",&from,&to);
Merge(from,to);
}
int
ans = -1;
for(int
i=1;i<=n;i++) if(pre[i]==i) ans++;
printf("%d\n",ans);
}
}

 

并查集专题: HDU1232畅通工程的更多相关文章

  1. 傻子都能懂的并查集题解——HDU1232畅通工程

    原题内容: Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都 ...

  2. 并查集 HDOJ 1232 畅通工程

    题目传送门 /* 并查集(Union-Find)裸题 并查集三个函数:初始化Init,寻找根节点Find,连通Union 考察:连通边数问题 */ #include <cstdio> #i ...

  3. 并查集_HDU 1232_畅通工程

    某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...

  4. 并查集入门(hdu1232“畅通工程”)

    在学习并查集之前,首先需要明白基本的并查集可以完成的功能.并查集主要是用于处理不相交集合的合并问题.它是一种基础算法,在离散数学中,可以利用并查集求一个图的连通分支,利用其这个特性可以为我们解决一系列 ...

  5. Leetcode之并查集专题-765. 情侣牵手(Couples Holding Hands)

    Leetcode之并查集专题-765. 情侣牵手(Couples Holding Hands) N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手. 计算最少交换座位的次数,以便每对情侣可以并 ...

  6. Leetcode之并查集专题-684. 冗余连接(Redundant Connection)

    Leetcode之并查集专题-684. 冗余连接(Redundant Connection) 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2 ...

  7. ZR并查集专题

    ZR并查集专题 并查集,作为一个基础算法,对于初学者来说,下面的代码是维护连通性的利器 return fa[x] == x ? x : fa[x] = getf(fa[x]); 所以,但是这对并查集的 ...

  8. HDU1232 畅通工程 并查集

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. hdu1232 畅通工程 并查集的 应用

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

随机推荐

  1. Python3 操作mysql数据库

    python关于mysql的API--pymysql模块 pymsql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymysq ...

  2. springboot 出现异常 java.net.BindException: Address already in use: bind

    java.net.BindException: Address already in use: bind

  3. 模板_BIT

    #include<bits/stdc++.h> #define maxn 500005 //#define int long long using namespace std; inlin ...

  4. windows10 下 gcc/g++ 的安装

    一.gcc的下载 网址:www.mingw.org ,点击右上方的 download installer 二.安装 打开安装程序,默认安装,弹出下列界面 找到mingw32-gcc-g++(注意cla ...

  5. django操作cookie和session

    一.cookie:保存在客户端浏览器上的键值对 Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会 ...

  6. sqli-labs(26)

    0X01 测试闭合 单引号报错 双引号不报错 ’闭合 构造语句  过滤了空格和and ?id=' anandd 1=1%23 ?id='+anandd+1=1%23 百度一下 一去看源码 真的顶不住 ...

  7. sqli-labs(24)

    0x1 前言 SQL注入一般分为两类:一阶SQL注入(普通SQL注入),二阶SQL注入 .二次注入不是注入两次的意思,请不要混淆 0x2 什么是二阶注入 二阶注入是指客通过构造数据的形式,在浏览器或者 ...

  8. 惠普服务器DL360G6安装ESXi主机后遗忘密码用u盘重置密码

    惠普服务器DL360G6安装ESXi主机后遗忘密码重置密码 先用rufus制作U盘启动盘,启动盘一定要用惠普专用hpe的esxi版本,否则安装会报错, 下载https://www.iplaysoft. ...

  9. sed扩展命令使用

    [root@b ~]# cat f.txt inet addr:192.168.0.110 Bcast:192.168.0.255 Mask:255.255.255.0[root@b ~]# cat ...

  10. 二进制方式安装mysql

    下载官方打包好的rpm的集合 https://downloads.mysql.com/archives/get/file/mysql-5.7.20-1.el7.x86_64.rpm-bundle.ta ...