POJ 1611 The Suspects 并查集
Time Limit:1000MS Memory Limit:20000KB 64bit IO Format:%lld & %llu
Description
Input
Output
Sample Input
100 4 2 1 2 5 10 13 11 12 14 2 0 1 2 99 2 200 2 1 5 5 1 2 3 4 5 1 0 0 0
Sample Output
4 1 1 复制一段网上看的并查集讲解
并查集学习:
l 并查集:(union-find sets)
一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。
l 并查集的精髓(即它的三种操作,结合实现代码模板进行理解):
1、Make_Set(x) 把每一个元素初始化为一个集合
初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。
2、Find_Set(x) 查找一个元素所在的集合
查找一个元素所在的集合,其精髓是找到这个元素所在集合的祖先!这个才是并查集判断和合并的最终依据。
判断两个元素是否属于同一集合,只要看他们所在集合的祖先是否相同即可。
合并两个集合,也是使一个集合的祖先成为另一个集合的祖先,具体见示意图
3、Union(x,y) 合并x,y所在的两个集合
合并两个不相交集合操作很简单:
利用Find_Set找到其中两个集合的祖先,将一个集合的祖先指向另一个集合的祖先。如图
l 并查集的优化
1、Find_Set(x)时 路径压缩
寻找祖先时我们一般采用递归查找,但是当元素很多亦或是整棵树变为一条链时,每次Find_Set(x)都是O(n)的复杂度,有没有办法减小这个复杂度呢?
答案是肯定的,这就是路径压缩,即当我们经过"递推"找到祖先节点后,"回溯"的时候顺便将它的子孙节点都直接指向祖先,这样以后再次Find_Set(x)时复杂度就变成O(1)了,如下图所示;可见,路径压缩方便了以后的查找。
2、Union(x,y)时 按秩合并
即合并的时候将元素少的集合合并到元素多的集合中,这样合并之后树的高度会相对较小。
第一次做并查集网上看了很多 学习了其中一个dalao的风格 写的很清晰 仰望高端玩家.jpg
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;const int maxn=30005;int father[maxn],rank[maxn];
int n,m;void init(int x)
{for(int i=0;i<n;i++){father[i]=i;rank[i]=1;}
}int Find(int x)
{if(x!=father[x]){father[x]=Find(father[x]);}return father[x];
}void Union(int x,int y)
{x=Find(x);y=Find(y);if(x==y)return ;if(rank[x]>=rank[y]){father[y]=x;rank[x]=rank[x]+rank[y];}else{father[x]=y;rank[y]=rank[x]+rank[y];}}int main()
{//freopen("input.txt","r",stdin);while(~scanf("%d%d",&n,&m)){if((n==0&&m==0))break;init(n);int fir,k,next;for(int i=1;i<=m;i++){scanf("%d%d",&k,&fir);for(int i=2;i<=k;i++){scanf("%d",&next);Union(fir,next);}}printf("%d\n",rank[father[0]]);}
}
转载于:https://www.cnblogs.com/Hyouka/p/5709333.html
POJ 1611 The Suspects 并查集相关推荐
- pku 1611 The Suspects 并查集的应用
http://poj.org/problem?id=1611 思路:统计出和0能够联系在一起的点,然后输出其个数 View Code #include <cstdio>#include & ...
- POJ 1611 The Suspects (并查集)
文章作者:ktyanny 文章来源:ktyanny 转载请注明,谢谢合作. ktyanny:a的第一道并查集. 题目描述: 有很多组学生,在同一个组的学生经常会接触,也会有新的同学的加入.但是SARS ...
- POJ 1611 The Suspects (并查集)
The Suspects 题目链接: http://acm.hust.edu.cn/vjudge/contest/123393#problem/B Description 严重急性呼吸系统综合症( S ...
- poj 1611 The Suspects // hoj 1564 The Suspects 并查集
/* 题目: 是说学生0怀疑有SARS病,跟他接触过的俱乐部的所有人以及他接触过的人再与别人接触, 都有可能有SARS病,要你求出给出的所有俱乐部人的名单,要你求出所有的嫌疑犯... 分析: 用并查集 ...
- Poj 1611 The Suspects
Poj 1611 的传送门 ***The Suspects*** Description Severe acute respiratory syndrome (SARS), an atypical p ...
- POJ - 1611 The Suspects
题目链接:1611 -- The Suspects 问题描述 思路 简单并查集 代码 #include <cstdio> #include <cstring> #include ...
- POJ 2236 Wireless Network 并查集
Wireless Network 并查集 Crawling in process... Crawling failed Time Limit:10000MS Memory Limit:6553 ...
- POJ 1182 食物链,并查集的拓展
http://poj.org/problem?id=1182 /******************************************************** 此道题目 前天看的时候 ...
- POJ 1417 True Liars 并查集+背包
题目链接:http://poj.org/problem?id=1417 解题思路:比较容易想到的是并查集,然后把第三组数据测试一下之后发现这并不是简单的并查集,而是需要合并之后然后判断的.并且鉴于题目 ...
最新文章
- 人机融合智能:人工智能3.0
- 测试tcp连接数工具_后端开发程序员不知道压力测试怎么能行
- 项目服务路由保存不成功_汽车延保服务有哪些项目?不了解的小伙伴快看过来...
- Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令
- class.getResourceAsStream与class.getClassLoader().getResourceAsStream区别
- 离线安装 Pytorch 1.2.0 torchvision 0.3.0
- asp 不能读取mysql 长文本文件,从文本文件中读取信息并存储入数据库_asp技巧
- AcWing 866. 试除法判定质数(素数判定)
- android 电影院订票系统 论文,基于Android平台的电影票订票系统的设计与实现
- matlabRC电路实验仿真
- C#初始化结构体数组方式
- 赚大钱,你需要多一些杠杆思维
- java strlen_字符串长度函数strlen和mb_strlen的区别示例介绍
- Arduino:数码管显示原理详解和Proteus仿真实验
- SpringBoot vue电影购票系统 电影院系统
- 离职当天,删库跑路,京东到家程序员被判刑
- 12 图浅析人口分布对经济趋势的影响
- Linux 基础操作、常用shell命令、vi常用命令、man帮助手册
- html登录号如何显示用户名,HTML更改登录标签,登录后用户名
- 数学推理相关的几个名词及LaTeX用法
热门文章
- 文心一言 VS 讯飞星火 VS chatgpt (27)-- 算法导论5.1 2题
- 基于FastDfs的分布式文件存储系统设计
- AMBA5 AHB协议规范(AHB5,AHB-Lite)中文版-第二章 信号描述
- 关于电阻为什么能阻碍电流流动(微观解释)
- 风格迁移 图像合成 图像重构 更换姿态和图像背景(使用交叉注意控制进行提示到图像编辑)GAN网络增强版
- 一个Unity高人的博客,涉猎范围很广,深度也很深。
- 系统环境变量和用户环境变量的区别
- Java AWT 布局管理器
- arm64以及amd64和龙芯4000下安装pyqt:
- 高数下|级数1|手写笔记