畅通工程

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 65048    Accepted Submission(s): 34771

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 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
Sample Output
1 0 2 998

Hint

Hint

Huge input, scanf is recommended.

解析:简单的并查集。有n个城市,m条路,假设完全没有路的情况,我们要修cnt=n-1条路,所以我们可以这样做:

输入的两个城市要是没有联通说明他们之间要建一条路,所以cnt--,有联通则说明不用修路,cnt不变。

代码:

#include<bits/stdc++.h>
using namespace std;int n,m,a,b,f[1005];
void init()
{for(int i=1; i<=n; i++){f[i]=i;}
}
int Find(int x)
{return f[x]==x?x:Find(f[x]);
}
int join(int a,int b)
{int fa=Find(a);int fb=Find(b);if(fa!=fb){f[fa]=fb;return 1;}return 0;
}
int main()
{while(~scanf("%d%d",&n,&m)&&n){init();int cnt=n-1;for(int i=0; i<m; i++){scanf("%d%d",&a,&b);if(join(a,b))cnt--;}printf("%d\n",cnt);}return 0;
}

hdu1232(简单并查集)相关推荐

  1. LA3644简单并查集判环

    题意:       有n个化合物,每个化合物是两种元素组成,现在要装车,但是一旦车上的化合物中的某几个化合物组成这样一组关系,有n个化合物正好用了n中元素,那么就会爆炸,输入的顺序是装车的顺序,对于每 ...

  2. 简单并查集-加边的无向图

    并查集小白入门 并查集最常用的两个函数就是find() 和 merge(): 代码如下所示: 这里最后统计边数时,可以用set来记录(依次遍历,将每个点的父节点加入集合,因为set默认去重,所以相等的 ...

  3. 1526:宗教信仰——简单并查集

    描述 世界上有许多宗教,你感兴趣的是你学校里的同学信仰多少种宗教. 你的学校有n名学生(0 < n <= 50000),你不太可能询问每个人的宗教信仰,因为他们不太愿意透露.但是当你同时找 ...

  4. hdu1272(简单并查集)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. 4.11每日一题之亲戚(洛谷c++)|简单并查集

  6. poj 2524 Ubiquitous Religions (简单并查集)

    题目链接:http://poj.org/problem?id=2524 There are so many different religions in the world today that it ...

  7. Hdu1232 畅通工程 【并查集】

    http://acm.hdu.edu.cn/showproblem.php?pid=1232 题目大意:有几个集合,问最少需要连几根线才能把这些集合并为一个集合. N个集合的话就需要N-1条路就行了, ...

  8. CodeForces - 468B Two Sets(并查集+思维)

    题目链接:点击查看 题目大意:现在给出两个集合A和B,再给出两个数a和b,现在规定在集合A中的数x必须满足x和a-x同时在集合a中,而在集合B中的数x也同样需要满足x和b-x同时在集合B中,现在给出一 ...

  9. [kuangbin带你飞]专题五 并查集 A - Wireless Network

    A - Wireless Network 题目链接:https://vjudge.net/contest/66964#problem/A 题目: An earthquake takes place i ...

最新文章

  1. 彻底理解C#中值类型和引用类型的区别
  2. 程序员面试题精选100题(35)-两链表的第一个公共结点[数据结构]
  3. Java 转换流 简介
  4. 搭建阿里云ecs服务器(一:购买)
  5. ABAP enablement in Sublime Text
  6. 538.把二叉搜索树转换为累加树(结合自己的理解解释一下别人题解的递归部分)
  7. 计算机组成原理+左冬红,计算机组成原理与接口技术--基于MIPS架构(第2版高等学校电子信息类专业系列教材)...
  8. shell类型、添加PATH环境变量、.bashrc、.profile、/etc/profile、/etc/environment
  9. 【Python】如何在Python项目中使用相对路径正确的导入模块/包
  10. 程序开发中版本管理之命名规则及格式
  11. 【历史上的今天】 5 月 5 日:微软发布 Windows 98 SE ;领英上线;键盘布局的改革者
  12. 数学模型--预测模型、BP神经网络预测
  13. matlab 图例 显示几个,matlab图例拆分成两个多个分别显示
  14. 转载:C语言运算符优先级记忆口诀
  15. win10重置网络命令_Win10怎么重置网络 Win10重置网络命令使用方法
  16. 后端返回JSON数组转Tree树形格式,展示到element-ui的tree树形组件
  17. 基于java web 应用电子商务网站开发
  18. XAG聚合细节举例说明
  19. (Ⅲ)使用七牛云作为图床获取外链方式总结(已更换为使用PicGO+腾讯云COS)
  20. 软件相貌测试准确吗,相貌测试(史上最准的颜值测试)

热门文章

  1. JavaScript权威指南--客户端存储
  2. golang错误处理(实验楼)
  3. AppStore 上架注意事项及错误修改
  4. Prism4文档翻译(第四章 第二部分)
  5. [EF4] CompiledQuery预编译性能提升 + 数据载入之大彻大悟
  6. mysql 的自动启动 使用配置文件 /etc/my.cnf
  7. tf.stack()和tf.unstack()的用法
  8. [云炬创业学笔记]第二章决定成为创业者测试7
  9. 科大星云诗社动态20210512
  10. [云炬商业计划书阅读分享]无水洗车市场推广策划书