BNU - 4216 - 修路(并查集)
来源:互联网 发布:金十数据现货黄金 编辑:程序博客网 时间:2024/05/11 22:15
BNU 4216.修路
Time Limit: 1000msMemory Limit: 65536KB
在某个景区内有n个景点,它们之间有m条路相连。然而,这m条路可能是不足够的,因为无法把这n个景点都连通起来。
例如当m
Input
第一行是n,m (1<=n<=1e5,1<=m<=1e6)
接下来就是m行,每行两个1 ~ n范围内的数,表示编号为这两个数的景点之间有一道路相连
Output
输出最少要再修建的道路的条数
Sample Input
5 2
1 2
3 4
Sample Output
2
并查集,在输入的时候不断合并集合,最后要找的就是有多少个景点是孤立的状态,因为每个集合都有个代表元素嘛,弄个vis数组,用来标记代表元素,后面遍历所有点,有多少个不同的代表元素就是有多少个孤立的景点,桥的数目就是景点数-1
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int uset[100010], vis[100010];int find(int x){ if(x != uset[x]) uset[x] = find(uset[x]); return uset[x];}int main(){ int n, m; while(scanf("%d %d", &n, &m)!=EOF){ for(int i = 0; i <= n; i++) uset[i] = i; memset(vis, 0, sizeof(vis)); for(int i = 0; i < m; i++){ int a, b; scanf("%d %d", &a, &b); a = find(a); b = find(b); if(a != b) uset[a] = b; } int ans = 0; for(int i = 1; i <= n; i++){ int t = find(i); if(!vis[t]){ vis[t] = 1; //标记代表元素 ans++; } } printf("%d\n", ans-1); } return 0;}
0 0
- BNU - 4216 - 修路(并查集)
- BNU - 4216 - 修路 (并查集判断连通分量)
- 修路(并查集)
- 要想富先修路 (并查集)
- BNU X-Plosives(并查集) @
- hd1232 修路最少(并查集问题)
- boj447.修路-最基本并查集
- 2014新生暑假个人排位赛06 -447. 修路(并查集)
- cf25d 修路使其联通 (并查集)
- BNU 4216.修路
- bnu 33684 Never Wait for Weights (权值并查集)
- 并查集(集并查)
- BNU Corporative Network(并查集求点到根节点的距离)@
- 并查集(含关系并查集)
- 【并查集】食物链(关系并查集)
- 【并查集】并查集详解(转)
- 分组并查集(种类并查集)
- 并查集, 畅通工程(简单并查集)
- TS流如何经过RTP封装及其vlc通过打开sdp文件的方式接收
- git创建与管理远程分支
- Python中如何定义字符串
- Bootstrap改变控件的高度和宽度问题
- 控件学习---UIImageView---摘自培训文档
- BNU - 4216 - 修路(并查集)
- HDOJ-2004-成绩转换
- Android--自定义控件打造史上最简单的侧滑菜单
- location的search操作——解析url字符串,返回包含所有参数的一个对象
- Grails开源框架Note
- 不经意间的内存泄露:try-catch(CException *e)
- MySQL基础(一)
- AFN的使用方式
- 陈超辉C/C++