POJ-图论-并查集模板
POJ-图论-并查集模板
1、init:把每一个元素初始化为一个集合,初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。
void init()
{
for (int i = 0; i < n; i++) p[i] = i;//p[i]即为i结点的父亲节点的编号
}
2、find(x) :查找一个元素所在的集合,即找到这个元素所在集合的祖先,判断两个元素是否属于同一集合,只要看他们所在集合的祖先是否相同即可。合并两个集合,也是使一个集合的祖先成为另一个集合的祖先。
int find(int x)
{
return x == p[x] ? x : p[x] = find(p[x]);//已包含路径压缩
}
3、Union(x,y) :合并x,y所在的两个集合,利用find()找到其中两个集合的祖先,将一个集合的祖先指向另一个集合的祖先。如图

void Union(int x, int y)
{
x = find(x);
y = find(y); if (x == y) return;
else p[y] = x;//把y树合并到x树上,以x为根
}
POJ 2524 Ubiquitous Religions
解题思路
并查集入门题,求出有多少个不同的连通分量即可。
AC代码
#include<cstdio>
const int N = ; int p[N];//父结点数组
int n, m;//结点数量和结点关系数量 void init()
{
for (int i = ; i < n; i++)p[i] = i;//初始化,父结点为自身,单结点为孤立树
} int find(int x)//找到x所在树的根结点
{
return (x == p[x]) ? x : p[x] = find(p[x]);
} void Union(int x, int y)//合并,将y树合并到x树上
{
x = find(x);
y = find(y);
if (x == y)return;
else p[y] = x;
} int main()
{
int cnt = ;
while (scanf("%d%d", &n, &m)!=EOF)
{
if (n == && m == ) break;
int x, y;
init();//初始化,清空数组
for (int i = ; i < m; i++)
{
scanf("%d%d", &x, &y);
Union(x, y);
}
int ans = ;
for (int i = ; i < n; i++)
{
if (i == p[i])ans++;
}
printf("Case %d: %d\n", cnt++, ans);
}
return ;
}
POJ 1611 The Suspects
解题思路

至于一个小组有多个人,从第二个人起与第一个人所在小组合并就好。
AC代码
#include<cstdio>
const int N = ; int p[N];//父结点数组
int n, m;//结点数量和结点关系数量 void init()
{
for (int i = ; i < n; i++)p[i] = i;//初始化,父结点为自身,单结点为孤立树
} int find(int x)//找到x所在树的根结点
{
return (x == p[x]) ? x : p[x] = find(p[x]);
} void Union(int x, int y)//合并,将y树合并到x树上
{
x = find(x);
y = find(y);
if (x == y)return;
else p[y] = x;
} int main()
{
while (scanf("%d%d", &n, &m)!=EOF)
{
if (n == && m == ) break;
int groupNum, x, y;
init();//初始化,清空数组
while(m--)
{
scanf("%d%d", &groupNum, &x);
while (--groupNum)
{
scanf("%d", &y);
Union(x, y);//每个组员与第一个组员所在团体合并
}
}
int ans = ;
for (int i = ; i < n; i++)//自己也是患者
{
if (find(i) == find())ans++;//和0号有关系的学生
}
printf("%d\n", ans);
}
return ;
}
POJ-图论-并查集模板的更多相关文章
- HDU 1213 How Many Tables(并查集模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1213 题意: 这个问题的一个重要规则是,如果我告诉你A知道B,B知道C,这意味着A,B,C知道对方,所以他们可以 ...
- poj 1984 并查集
题目意思是一个图中,只有上下左右四个方向的边.给出这样的一些边, 求任意指定的2个节点之间的距离. 就是看不懂,怎么破 /* POJ 1984 并查集 */ #include <stdio.h& ...
- 【2018寒假集训Day 8】【并查集】并查集模板
Luogu并查集模板题 #include<cstdio> using namespace std; int z,x,y,n,m,father[10001]; int getfather(i ...
- 【并查集模板】 【洛谷P2978】 【USACO10JAN】下午茶时间
P2978 [USACO10JAN]下午茶时间Tea Time 题目描述 N (1 <= N <= 1000) cows, conveniently numbered 1..N all a ...
- 【并查集模板】并查集模板 luogu-3367
题目描述 简单的并查集模板 输入描述 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数Zi.Xi.Yi 当Zi=1时,将Xi与Yi所在的集合合并 当Zi=2时,输出 ...
- poj 1797(并查集)
http://poj.org/problem?id=1797 题意:就是从第一个城市运货到第n个城市,最多可以一次运多少货. 输入的意思分别为从哪个城市到哪个城市,以及这条路最多可以运多少货物. 思路 ...
- POJ 2492 并查集扩展(判断同性恋问题)
G - A Bug's Life Time Limit:10000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u S ...
- POJ 2492 并查集应用的扩展
A Bug's Life Time Limit: 10000MS Memory Limit: 65536K Total Submissions: 28651 Accepted: 9331 Descri ...
- HDU 1213 - How Many Tables - [并查集模板题]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213 Today is Ignatius' birthday. He invites a lot of ...
随机推荐
- 测试mybatis延迟加载错误与解决方法
什么是延迟加载? 延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去加载从信息. 需求: 查询订单信息,需要时再去查询用户信息 实现方式: 编写两个statement,其中一个s ...
- 函数式编程之moand的作用
1.计算链的构建:通过类型提升实现:双向链. 2.上下文的保存: 3.副作用的隔离:异步.io
- Mysql8.0 创建远程登陆账户
mysql8和原来的版本有点不一样,8的安全级别更高,所以在创建远程连接用户的时候, 不能用原来的命令(同时创建用户和赋权): mysql>grant all PRIVILEGES on *.* ...
- luoguP1742 最小圆覆盖
最小圆覆盖 首先 没错,我是个蒟蒻.luogu 流程 圆 C; for(i=1 to n) { if(P[i] 不在 C 内) { C = {P[i], 0}; for(j=1 to i-1) { i ...
- ubuntu之路——day19.1 深度CNN的探究
1.经典的CNN LeNet-5 1998的CNN鼻祖 以前用的sigmoid和tanh 下图给的是relu和softmax AlexNet ImageNet2012的冠军 VGG-16 ImageN ...
- cv2 的用法
转载:https://www.cnblogs.com/shizhengwen/p/8719062.html 一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 fi ...
- WordPress入门 之 设置导航菜单
WordPress 3.0 添加了一个自定义导航菜单的功能,让你可以很自由地设置网站的导航菜单.现在大多数的主题也都支持这个功能了,那么,究竟该如何设置WordPress导航菜单?今天倡萌就介绍一下. ...
- asp.net core session使用
一.配置回话状态 Microsoft.AspNetCore.App metapackage 中包含的 Microsoft.AspNetCore.Session 包提供中间件来管理会话状态. 若要启用会 ...
- Curiosity-Driven Learning through Next State Prediction
Curiosity-Driven Learning through Next State Prediction 2019-10-19 20:43:17 This paper is from: http ...
- 【转】解决chrome浏览器不支持audio和video标签的autoplay自动播放
声音无法自动播放这个在 IOS/Android 上面一直是个惯例,桌面版的 Safari 在 2017 年的 11 版本也宣布禁掉带有声音的多媒体自动播放功能,紧接着在 2018 年 4 月份发布的 ...