题目描述:给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~

输入描述:第一行两个正整数 n 和 m 。 接下来的m行中,每行两个正整数 i 、 j ,表示点i与点j之间有一条无向道路。

输出描述:输出一个整数,表示答案

例 :

输入

4 2

1 2 
3 4

输出:1

备注:对于100%的数据,有n,m<=100000。

#include<iostream>
#include<cstdio>
int pre[100000];//根据题目的数据规模
using namespace std;
//并查集 --加边无向图
//若pre[3]=7;那么视为3的上级是7 下标不可重复,值可重复,对应一个父节点可以对应多个子节点
void init(int pre[],int n){//初始化自己是自己的代表元 for(int i=1;i<=n;i++){pre[i]=i;}
}
int find(int x) {int r=x;while(pre[r]!=r){//自己不是代表元 r=pre[r]; //让自己的上级再去找上级 }return r;
}int main(){int n,m ,p1,p2,i,total,f1,f2;scanf("%d %d",&n,&m);//正整数已经确保n!=0 init(pre,n);total=n-1;while(m--){scanf("%d %d",&p1,&p2);f1=find(p1);f2=find(p2);if(f1!=f2){pre[f1]=f2;total--;}}printf("%d\n",total);return 0;
} 

算法-并查集-加边无向图相关推荐

  1. 并查集——加边的无向图

    并查集--加边的无向图 题目描述 给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述: 第一行两个正整数 n 和 m . 接下来的m行中,每行两个 ...

  2. [基础算法] 并查集

    并查集 1.将两个集合合并 2.查询两个集合是否在同一个集合中 基本原理:每个集合用同一棵树来表示,树根的编号就是树的编号,每个节点储存其父节点,p[x]表示x的父节点. 问题一:如何判断是否为根节点 ...

  3. UVA10034 Freckles【Kruskal算法+并查集】

    In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...

  4. 使用并查集实现查找无向图的连通分量和求解有向图的强连通分量

    目录 1.无向图的连通分量 2.求解连通分量算法的实现 3.有向图的强连通分量 4.求解有向图的强连通分量 使用C语言实现并查集 有向图和无向图 1.无向图的连通分量 无向图G中,如果存在从顶点v1到 ...

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

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

  6. [杂记]算法: 并查集

    0. 引言 我们考虑如何计算一个图连通分量的个数. 假定简单无向图 G G G有两个连通分量(子图) G 1 , G 2 G_1, G_2 G1​,G2​, 如下图所示: 一个很自然的想法是, 要想求 ...

  7. 最小生成树kruskal算法并查集版 C语言实现

    今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...

  8. 最小生成树KrusKal算法(并查集)

    洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...

  9. 经典算法-并查集、快速排序、字典序算法、二分搜索、牛顿开方法、求质数(筛选法)、编辑距离、滑动窗口、异或求重、长除法

    目录 ​​​​​​​​​​​​​​ 并查集 快速排序 字典序算法 二分搜索 开根号-牛顿开方法 求质数 编辑距离 滑动窗口 异或求重 长除法 ​​​​​​​ 并查集 并查集用于解决相同元素集合动态连接 ...

最新文章

  1. 思杰“个人云”翻开企业人本管理新篇章
  2. mysql create at_create_at update_at
  3. HBase设计与开发性能优化(转)
  4. windows启动管理器_win7系统任务管理器的五种打开方式,很实用,学习一下
  5. J2ME手机游戏引擎程序结构简述
  6. UVALive - 3231 Fair Share(最大流+二分)
  7. 八、一篇文章快速搞懂MySQL 常见的数据类型(整型、小数、字符型、日期型详解)
  8. Java LinkedList公共布尔提供(对象o)方法(带示例)
  9. Moody Photoshop Panel for mac(ps专业色彩调色扩展面板)
  10. 数据结构 关键路径的个人理解
  11. 大数据笔试面试题(转载)
  12. 一种人脸识别活体检测方法
  13. 大数据、云计算、物联网三者的关系
  14. MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法
  15. 《奥黛丽·赫本》一辈子活在优雅里
  16. springboot农机装备生产车间物料配送车辆调度管理系统毕业设计源码181710
  17. check your GPU Compute Capability| 2021 英伟达 GPU 的计算能力排名
  18. OSI七层模型的功能及协议
  19. GIS创新实践【实验2】疫情地图制作与发布
  20. 家用小型监控器安装位置与功能

热门文章

  1. 简介一些黑盒测试的方法
  2. 基于STM32的ESP8266使用教程(二)
  3. 使用ffmpeg剪辑视频【删除视频头部,尾部,中间,视频拼接,获取视频指定时间截图】
  4. 使用ffmpeg在视频中心添加透明水印
  5. WWW 2015 | LINE:大规模信息网络的嵌入
  6. LevelDB整体介绍
  7. Three.js基础之图元
  8. Mac Tomcat安装 localhost 拒绝了我们的连接请求
  9. 有趣的排序算法——Monkey King排序 详细介绍
  10. tensorflow报错Can not squeeze dim[1], expected a dimension of 1, got n for解决办法