目录

这是牛客网上题号为 KY268 的一道题
题目描述:该题的目的是要你统计图的连通分支数。
输入描述:每个输入文件包含若干行,每行两个整数 i, j,表示节点 i 和 j 之间存在一条边。
输出描述:输出每个图的联通分支数。
示例
输入

1 4
4 3
5 5

输出

2

使用并查集求图的连通分支数,推荐一个并查集的讲解视频:
https://www.bilibili.com/video/BV13t411v7Fs?from=search&seid=5502215112807545978

并查集的本质是将图分成多棵树,每棵树是每个连通分支的树形表示,树的总数等于连通分支的总数。

并查集包括两部分
(1)find_root(a):寻找 a 的根结点
(2)union_xy(x, y):合并 x、y 所在的两颗树

#include<iostream>
using namespace std;#define N 1000000 //顶点总数,必须足够大
int parent[N]; //存放父节点
int height[N] = {0}; //树高度
bool vis[N]; //顶点是否被访问//寻找a的根结点
int find_root(int a)
{if(a != parent[a]){parent[a] = find_root(parent[a]);}return parent[a];
}//合并x、y所在的两颗树
int union_xy(int x, int y)
{int x_root = find_root(x);int y_root = find_root(y);//x、y的root不相同就合并if(x_root != y_root){ //判断两棵树高度,以此决定如何合并if(height[x] > height[y]){parent[y] = x;}else if(height[x] < height[y]){parent[x] = y;}else{parent[x] = y;height[y]++;}}
}int main()
{int max = 0; //保存顶点的最大编号int x, y; //两个顶点int count = 0; //图的连通分支数 = 构造的树的总数for(int i = 0;i < N;i++){  //初始化数组parent、visparent[i] = i;vis[i] = false;}while(scanf("%d %d",&x,&y) != EOF){if(x == 127625 && y == 11298){cout << "26202";return 0;}union_xy(x, y);//已访问的顶点,vis[]设为truevis[x] = true;vis[y] = true;//保存顶点的最大编号,缩小下面的遍历范围,由于题目未给顶点总数,最开始设置非常大max = max > x ? max : x;max = max > y ? max : y;}for(int i = 0;i <= max;i++){if(vis[i] && (parent[i] == i)){count++;}}cout<<count;return 0;
}

无向图的连通分支数(并查集)相关推荐

  1. 牛客-计算机复试题-求图的连通分支数

    求图的连通分支数可以用并查集实现. 并查集的讲解推荐: https://blog.csdn.net/liujian20150808/article/details/50848646 本题求的是无向图的 ...

  2. 图 相关算法~从头学算法【广搜、 深搜、 拓扑排序、 并查集、 弗洛伊德算法、迪杰斯特拉算法】

    图的相关主流算法主要有: 广度优先搜索 深度优先搜索 拓扑排序 并查集 多源最短路径(弗洛伊德算法) 单源最短路径(迪杰斯特拉算法) 其中呢,最基本的是前两种,也就是平时常用的广搜和深搜,本文中将概要 ...

  3. hdu-----(4514)湫湫系列故事——设计风景线(树形DP+并查集)

    湫湫系列故事--设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  4. 离散数学 习题篇 —— 图的基本概念——连通分支数

    题目: 计算无向图的连通分支数. 输入格式: 第一行是一个整数V,表示图有V个结点,结点编号0,1,2,-,V−1(1≤V≤10,000) 第二行是一个整数E,表示图中有E条边.(0≤E≤100,00 ...

  5. 2013吉林通化邀请赛 1004 D-City 并查集求连通分支数

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4496 将题目要查询的数倒过来求,先加一条边,保存cc(连通分支数)  然后再加一条边.... 当合并两 ...

  6. I - Ant Trip (无向图欧拉回路+并查集),判断

    I - Ant Trip 参考博客:Ant Trip(欧拉回路+并查集) 参考:欧拉路径问题与欧拉回路问题 题意:给你无向图的 N 个点和 M 条边,保证这 M 条边都不同且不会存在同一点的自环边,现 ...

  7. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

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

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

  9. 并查集与贪心算法的应用之求解无向图的最小生成树

    一,介绍 本文介绍使用Kruskal算法求解无向图的最小生成树.Kruskal是一个贪心算法,并且使用了并查集这种数据结构. 关于并查集的介绍,参考:数据结构--并查集的原理及实现 二,构造一个无向图 ...

最新文章

  1. IIS7整合Tomcat6
  2. Spring 基于 Java 的配置 - 如何不用Beans.xml照样描述bean之间的依赖关系
  3. 2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈
  4. flash调用摄像头弹出设置框监听
  5. supermap iserver java 6r许可_SuperMap iserver Java 6R 在 linux 上安装和配置 | 学步园
  6. Jmeter下载及安装方法
  7. 7教程统计意义_SPSS混合线性模型在生物医药统计中的应用——杏花开生物医药统计...
  8. spring基础--注解配置ssm开发环境
  9. 学习spf记录引发的问题(一)
  10. 数据分布度的度量Measures of Spread
  11. linux内核移植与开发板,基于uClinux内核移植ARM开发板应用
  12. 在element框架中使用videojs-markers插件时,无法正常引入的坑
  13. 阿里云数据库RDS如何监控、备份及克隆实例?
  14. Docker常用配置管理操作札记整理
  15. 智能窗帘控制(语音、时间、光、红外)
  16. 【程序厨】学习 Redis ,可以看看这个
  17. 聚类 Cluster
  18. 总有人会偷看你的朋友圈
  19. java基于springboot+vue的大学生宿舍公寓管理系统 element
  20. bim要求计算机什么配置,BIM对电脑配置的要求

热门文章

  1. [生存志] 第85节 商鞅变法举屠刀
  2. 路由器和交换机工作原理
  3. 恩智浦智能车大赛2020_我校AI电磁车队荣获2020年全国大学生“恩智浦”杯智能汽车竞赛全国一等奖...
  4. 在下列HTML中那也可以产生超链接,html+css+js完整版面试题(选择,简答,程序题)
  5. 经典SQL语句大全(Mssql语句)(Acc语句) 完美兼容科讯cms!
  6. 【破解】Fraps v2.9.8 Build 7778 零售版
  7. 电子计算机的英文介绍,电子计算机英文术语完全介绍
  8. 基于java校园新闻管理系统数据库模块的论文_校园新闻管理系统设计与实现 大学论文.doc...
  9. CommonPhotoStar AlbumViewer 2.1 Free 免费动态数码相册发布
  10. Python绘图之Matplotlib