题目选自洛谷P1536

并查集的变相考察类型的题目

先处理每一条存在的边,即把每条存在的边所连接的两个结点用并查集合并起来。

然后通过记录不同的代表元个数,就可以知道有多少个集合,即有多少个连通块了。

可以发现,一条边只能把两个连通块合成为一个,即将连通块个数减少1,要实现全市任何两个村镇间都可以实现交通,即连通块只有一个,所以答案就是连通块个数-1,输出即可。

那么,有多少个连通块呢?

也就是有几个帮派! 当然就问 有几个老大了, 如果自己的老大是自己,那么自己就是这个帮派的老大了,就代表一个连通块。

即: find(i) = i;

题目描述

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

输入格式

输入包含若干组测试测试数据,每组测试数据的第一行给出两个用空格隔开的正整数,分别是城镇数目 n 和道路数目 m ;随后的 m 行对应 m 条道路,每行给出一对用空格隔开的正整数,分别是该条道路直接相连的两个城镇的编号。简单起见,城镇从 1 到 n 编号。

注意:两个城市间可以有多条道路相通。

输出格式

对于每组数据,对应一行一个整数。表示最少还需要建设的道路数目。

输入输出样例

输入 1

4 2
1 3
4 3
3 3
1 2
1 3
2 3
5 2
1 2
3 5
999 0
0

输出 1

1
0
2
998

说明/提示

数据规模与约定

对于 100% 的数据,保证 1≤n<1000 。

解题代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int f[1010];
int n,m,p,x,y;
void init(){for(int i=1;i<=n;i++)f[i] = i;
}
int find(int a){if(f[a]==a) return a;return f[a]=find(f[a]);
}
void merge(int a,int b){if(find(a) != find(b))f[find(a)] = find(b);
}
int main(){while(1){int ans=0;cin>>n;if(n==0) break;cin>>m;init();for(int i=1;i<=m;i++){cin>>x>>y;merge(x,y);}for(int i=1;i<=n;i++){if(find(i)==i) ans++; //有多少个组}cout<<ans-1<<endl; //组的个数减一就是答案}return 0;
}

并查集——村村通(洛谷 P1536)相关推荐

  1. P1536 村村通 洛谷

    https://www.luogu.org/problem/show?pid=1536 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村 ...

  2. 并查集——程序自动分析(洛谷 P1955)

    题目选自洛谷P1955 比较复杂一点的并查集题目,还用到了离散化的思想 首先明确一点:相等具有传递性,不相等不具有传递性(Eg:若x1等于x2,x2等于x3时,显然x1=x3.但当x1不等于x2,x2 ...

  3. 并查集——关押罪犯(洛谷 P1525)

    题目选自洛谷P1525 此题是一道很经典,而且很好的题目.思路也十分的新颖,比较的难以捉摸. 题面大意:(人性翻译) 给你m对矛盾关系,每对关系分别涉及到x,y两人,矛盾值为w 请你判断分配x和y到两 ...

  4. 洛谷P1536 村村通【并查集】

    题目链接:P1536 村村通 程序说明: n个集合需要用n - 1条线连接起来,因此合并完集合后,循环遍历所有点,记录集合的总数,减一则为正确答案 代码如下: #include <iostrea ...

  5. 洛谷P1536村村通(并查集模板题)

    问题出处: https://www.luogu.com.cn/problem/P1536 题目描述: 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府 " ...

  6. 洛谷P1536 村村通

    链接:P1536 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一定 ...

  7. 洛谷—— P1536 村村通

    P1536 村村通 题目描述 某市调查城镇交通状况,得到现有城镇道路统计表.表中列出了每条道路直接连通的城镇.市政府"村村通工程"的目标是使全市任何两个城镇间都可以实现交通(但不一 ...

  8. 洛谷 P1536 村村通

    做题地址:https://www.luogu.com.cn/problem/P1536 这一题也是在考察并查集,不过这一次不是考察两个顶点是否处于同一块,而是询问区间块的个数. 找到区间块的个数后,再 ...

  9. P1536 村村通(并查集)

    村村通 - 洛谷https://www.luogu.com.cn/problem/P1536 #include <iostream> #include <cstdio> #in ...

最新文章

  1. ios 应用 开发流程。。。
  2. live meeting中白板无法正常使用
  3. 一键 linux桌面安装vnc,Ubuntu 16.04 LTS一键安装VNC
  4. 初学oracle遇到些小麻烦
  5. VB 两种方法建立多级目录
  6. css文本溢出 so easy~
  7. 如何保证缓存与数据库双写时的数据一致性?
  8. 老外挑战360加固--实战分析(很详细)
  9. 苹果鼠标滚轮驱动_黑苹果仿冒秒控鼠标
  10. MDK编译过程及ARM编译工具链
  11. Linux添加中文字体
  12. Egret 2d 实现黑暗下光照效果
  13. 最新kali之hashcat
  14. 创建带图文的超级菜单(导航菜单)(二)
  15. 鸿蒙荣耀v40,荣耀V40系列放料:高配麒麟9000,将搭载鸿蒙2.0
  16. java.lang.ClassNotFoundException: com.sun.activation.registries.LogSupport
  17. java获取session失效时间_Java设置session超时(失效)的时间
  18. 详解广义线性模型的来龙去脉
  19. android rootfs_android.img,进度栏和Rootfsimg自动更新还应该解决了一些兼容性问题
  20. IP地址段计算方法——计算最大广播地址,最小网络地址

热门文章

  1. 深入理解SQL Server的规划和安装
  2. 计算机 旧词新说_如何使旧计算机再次有用
  3. 领导力十律_关于开放领导力的10个最受欢迎的故事
  4. input 底线_社区建设如何帮助组织的底线
  5. 持续交付 devops_使用DevOps开始加速软件交付
  6. CSS两栏布局之右栏布局
  7. mysql用编号查询密码,【mysql中退出当前数据库】
  8. SLAM Cartographer(7)地图构建器
  9. Gazebo加载模型时黑屏
  10. 2014电池测试软件,【技术】关于锂电池GB31241-2014洗涤测试要求