算法-并查集-加边无向图
题目描述:给你一个 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;
}
算法-并查集-加边无向图相关推荐
- 并查集——加边的无向图
并查集--加边的无向图 题目描述 给你一个 n 个点,m 条边的无向图,求至少要在这个的基础上加多少条无向边使得任意两个点可达~ 输入描述: 第一行两个正整数 n 和 m . 接下来的m行中,每行两个 ...
- [基础算法] 并查集
并查集 1.将两个集合合并 2.查询两个集合是否在同一个集合中 基本原理:每个集合用同一棵树来表示,树根的编号就是树的编号,每个节点储存其父节点,p[x]表示x的父节点. 问题一:如何判断是否为根节点 ...
- UVA10034 Freckles【Kruskal算法+并查集】
In an episode of the Dick Van Dyke show, little Richie connects the freckles on his Dad's back to fo ...
- 使用并查集实现查找无向图的连通分量和求解有向图的强连通分量
目录 1.无向图的连通分量 2.求解连通分量算法的实现 3.有向图的强连通分量 4.求解有向图的强连通分量 使用C语言实现并查集 有向图和无向图 1.无向图的连通分量 无向图G中,如果存在从顶点v1到 ...
- 简单并查集-加边的无向图
并查集小白入门 并查集最常用的两个函数就是find() 和 merge(): 代码如下所示: 这里最后统计边数时,可以用set来记录(依次遍历,将每个点的父节点加入集合,因为set默认去重,所以相等的 ...
- [杂记]算法: 并查集
0. 引言 我们考虑如何计算一个图连通分量的个数. 假定简单无向图 G G G有两个连通分量(子图) G 1 , G 2 G_1, G_2 G1,G2, 如下图所示: 一个很自然的想法是, 要想求 ...
- 最小生成树kruskal算法并查集版 C语言实现
今天数据结构课讲了最小生成树的Kruskal算法和Prim算法,不过都只是概念,可能是怕他们听不懂吧,反正算法实现一概不讲...囧 下午抱着<算法导论>跑去图书馆看Kruskal算法,发现 ...
- 最小生成树KrusKal算法(并查集)
洛谷p1111链接 克鲁斯卡尔算法的思路就是由森林变成树的过程,其中最主要的就是贪心和并查集的应用. 我们知道链接n个点需要n-1条边,这就满足的最后生成的是一颗树,而不是一个环.在这n-1条边的选择 ...
- 经典算法-并查集、快速排序、字典序算法、二分搜索、牛顿开方法、求质数(筛选法)、编辑距离、滑动窗口、异或求重、长除法
目录 并查集 快速排序 字典序算法 二分搜索 开根号-牛顿开方法 求质数 编辑距离 滑动窗口 异或求重 长除法 并查集 并查集用于解决相同元素集合动态连接 ...
最新文章
- 思杰“个人云”翻开企业人本管理新篇章
- mysql create at_create_at update_at
- HBase设计与开发性能优化(转)
- windows启动管理器_win7系统任务管理器的五种打开方式,很实用,学习一下
- J2ME手机游戏引擎程序结构简述
- UVALive - 3231 Fair Share(最大流+二分)
- 八、一篇文章快速搞懂MySQL 常见的数据类型(整型、小数、字符型、日期型详解)
- Java LinkedList公共布尔提供(对象o)方法(带示例)
- Moody Photoshop Panel for mac(ps专业色彩调色扩展面板)
- 数据结构 关键路径的个人理解
- 大数据笔试面试题(转载)
- 一种人脸识别活体检测方法
- 大数据、云计算、物联网三者的关系
- MAC里“微软雅黑”字体标准体和粗体无法同时使用问题的解决方法
- 《奥黛丽·赫本》一辈子活在优雅里
- springboot农机装备生产车间物料配送车辆调度管理系统毕业设计源码181710
- check your GPU Compute Capability| 2021 英伟达 GPU 的计算能力排名
- OSI七层模型的功能及协议
- GIS创新实践【实验2】疫情地图制作与发布
- 家用小型监控器安装位置与功能
热门文章
- 简介一些黑盒测试的方法
- 基于STM32的ESP8266使用教程(二)
- 使用ffmpeg剪辑视频【删除视频头部,尾部,中间,视频拼接,获取视频指定时间截图】
- 使用ffmpeg在视频中心添加透明水印
- WWW 2015 | LINE:大规模信息网络的嵌入
- LevelDB整体介绍
- Three.js基础之图元
- Mac Tomcat安装 localhost 拒绝了我们的连接请求
- 有趣的排序算法——Monkey King排序 详细介绍
- tensorflow报错Can not squeeze dim[1], expected a dimension of 1, got n for解决办法