Luogu [P3367] 模板 并查集
【模板】并查集
题目详见:[【P3367】【模板】并查集] (https://www.luogu.org/problemnew/show/P3367)
这是一道裸的并查集题目(要不然叫模板呢) 废话不多说进入正题:
并查集通过一个一维数组来实现,本质上是维护一个森林。刚开始的时候,森林里的每一个结点都是一个集合(也就是只有一个结点的树),之后根据题意,逐渐将一个个集合合并(也就是合并成一棵大树)。之后寻找时不断查找父节点,当查找到父结点为本身的结点时,这个结点就是祖宗结点。合并则是寻找这两个结点的祖宗结点,如果这两个结点不相同,则任意将其中一边的集合作为另一边集合的子集。
AC代码:
#include<iostream>
using namespace std;
int n/*n个元素*/,m/*m个操作*/,f[]/*第i个人的祖宗为f[i]*/;
int find(int x) //找祖宗(※※重点)
{
if(f[x]==x) //若自己的祖宗为自己
return f[x];
else
return f[x]=find(f[x]);//路径压缩(※※难点):把递归过程中遇到的结点的祖宗结点也直接修改了
}
void hebing(int x,int y) //合并操作
{
int fx=find(x),fy=find(y);
if(fx!=fy) //(其实这一步可有可无,因为之前已经判断过了)
f[fx]=fy; //x的祖宗 的父亲 为y的祖宗
return;
}
int main()
{
cin>>n>>m; //读入
for(int i=;i<=n;i++)
f[i]=i; //初始化:n个数,每个数祖宗为自己
for(int i=;i<=m;i++) //依次读入m个操作要求
{
int z,x,y;
cin>>z>>x>>y;
if(z==) //执行查询操作
{
if(find(x)==find(y)) //如果两个人为同一个祖宗,则在一个集合 (※※重点)
cout<<"Y"<<endl;
else //否则不在一个集合
cout<<"N"<<endl;
}
else //执行合并操作
hebing(x,y);
}
return ;
}
Luogu [P3367] 模板 并查集的更多相关文章
- luoguP3367 [模板]并查集
题目链接:https://www.luogu.org/problemnew/show/P3367 思路: 今天学了新算法——并查集,本题是简单的并查集题的模板. 核心思想是“递归+压缩路径”. 并查集 ...
- HDU 1213 How Many Tables(模板——并查集)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1213 Problem Description Today is Ignatius' birthday ...
- HDU 1232 畅通工程(模板——并查集)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1232 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出 ...
- 【畅通工程 HDU - 1232 】【并查集模板】
并查集讲解和模板 有一个博文对此分析的很透彻,附链接 为避免原链接失效,现摘录如下: 为了解释并查集的原理,我将举一个更有爱的例子. 话说江湖上散落着各式各样的大侠,有上千个之多.他们没有什么正当职业 ...
- TTTTTTTTTTTTTT poj 1127 Jack Straws 线段相交+并查集
题意: 有n个木棍,给出木棍的两个端点的x,y坐标,判断其中某两个线段是否连通(可通过其他线段连通) #include <iostream> #include <cstdio> ...
- Luogu P3367 【模板】并查集
题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入输出格式 输入格式: 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数Zi.Xi.Yi 当Zi=1 ...
- 洛谷P3367 【模板】并查集
P3367 [模板]并查集 293通过 551提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 不知道哪错了 为啥通不过最后三个节点 题解 不懂为什么MLE 最后一个数 ...
- 洛谷 P3367 【模板】并查集
P3367 [模板]并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作. 输入输出格式 输入格式: 第一行包含两个整数N.M,表示共有N个元素和M个操作. 接下来M行,每行包含三个整数 ...
- 并查集 P3367 【模板】并查集
P3367 [模板]并查集 #include<iostream> #include<algorithm> #include<cstdio> #include< ...
随机推荐
- [poj]开关类问题 枚举 位运算
poj 1222 EXTENDED LIGHTS OUT 开关只有两种方案 按和不按,按两次相当于关 只用枚举第一排开关的按法即可,剩下的行为使上一排的灯全部关闭,按法可以确定,并且是唯一的. 最后 ...
- ue4 enable input
actor: enable input 这个可以使多个actor接收输入 pawn: possese pawn使用enable input是不生效的 貌似不允许多个pawn同时接收输入,可以考虑直接 ...
- Solr 6.7学习笔记(08)-- Facet
在搜索中,我们搜索时,通常会自动返回一些相关的搜索.比如,你搜索了一本书,会自动返回作者信息加上他的其它书籍的数量.这种功能在Solr中称之为Facet.不太好翻译.下面对于参数的说明,我以搜索“手机 ...
- 关于spring的简概
一.Spring入门操作 IOC 创建对象 <bean id="user" class="com.itheima.domain.User">< ...
- 不使用三方包时,如何在ThinkSNS中建立优雅的用户权限管理
什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).Thin ...
- CODING 告诉你硅谷的研发项目管理之道(5)
CODING 已经通过前四期文章,让大家逐步了解了一些硅谷优秀的项目管理者是如何工作.如何维持团队高效运作的.在过去的十几年中,中国的互联网行业发展过于迅猛,导致很多管理人员都是赶鸭子上架,商场如战场 ...
- 在centos中安装最新版nginx,同时更改官方文档路径错误
nginx的可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. 正式开始前,编译环境gcc g ++开发库之类的需要提前装好,这里默认你已经装好. ububtu平台编译 ...
- 3、CreateJS介绍-SoundJS
需要在html5文件中引入的CreateJS库文件是soundjs-0.5.2.min.js HTML5文件如下: <!DOCTYPE html> <html lang=" ...
- JS高级学习历程-13
[正则表达式] \d \d\d [a-z] 什么是正则表达式:用于记录文本规则的代码 正则表达式的作用: ① 可以匹配文本,表单验证(手机号码.邮箱.qq号码) ② 赛选网页内 ...
- nutzboot 使用nacos替换zookeeper
先放一段从网上拷贝一段分布式CAP理论的概念 分布式领域中存在CAP理论,且该理论已被证明:任何分布式系统只可同时满足两点,无法三者兼顾. ①C:Consistency,一致性,数据一致更新,所有数据 ...