首页 > 其他分享 >P3367 【模板】并查集

P3367 【模板】并查集

时间:2024-02-13 19:44:24浏览次数:28  
标签:int 查集 father mid P3367 find 模板

原题链接

并查集模板练手。

递归版本

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int father[N];
int find(int mid){
    if (father[mid]!=mid){
        father[mid]=find(father[mid]);
    }
    return father[mid];
}
void union_fa(int x,int y){
    father[find(x)]=find(y);
}
int main(){
    int n,m;
    cin>>n>>m;
    for (int i=1;i<=n;i++) father[i]=i;
    for (int i=1;i<=m;i++){
        int z,x,y;
        cin>>z>>x>>y;
        if (z==2) 
            if (find(x)==find(y)) cout<<"Y\n";
            else cout<<"N\n";
        else {
            union_fa(x,y);
        } 
    }
    return 0;
}

非递归版本

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int father[N],size[N],Stack[N];
int find(int mid){
    int start=0;
    while (father[mid]!=mid){
        Stack[start++]=mid;
        mid=father[mid];
    }
    for (int i=0;i<start;i++) Stack[i]=mid;
    return father[mid];
}
void union_fa(int x,int y){
    father[find(x)]=find(y);
}
int main(){
    int n,m;
    cin>>n>>m;
    for (int i=1;i<=n;i++){
        father[i]=i;
        size[i]=1;
    }
    for (int i=1;i<=m;i++){
        int z,x,y;
        cin>>z>>x>>y;
        if (z==2) 
            if (find(x)==find(y)) cout<<"Y\n";
            else cout<<"N\n";
        else {
            if (size[find(x)]<size[find(y)]){
                union_fa(x,y);
                size[find(y)]+=size[find(x)];
            }
            else{
                union_fa(y,x);
                size[find(x)]+=size[find(y)];
            }
        } 
    }
    return 0;
}

 

标签:int,查集,father,mid,P3367,find,模板
From: https://www.cnblogs.com/purple123/p/18014775

相关文章

  • P4512 【模板】多项式除法
    为什么不能直接用\(F(x)\timesG(x)^{-1}\)做?\(G(x)^{-1}\)是模\(x^{m+1}\)意义下的,\(n-m>m\)时得到的\(Q(x)\)就是错的。记\(F'(x)\)为\(F(x)\)系数翻转后的多项式,即若\(F(x)=\sum\limits_{i=0}^nf_ix^i\),则\(F'(x)=\sum\limits_{i=0}^nf_{n......
  • 集合问题——并查集
    目录问题引入算法原理参考代码问题引入给出n个人的m个关系,表示给出的两个人都是朋友关系,之后进行k次询问,要求判断给出的两人是否是朋友关系,朋友的朋友也是朋友算法原理简单来说就是对集合的合并进行一个处理,使得是朋友的一群人用一个共同的朋友记录,这样在查询的时候就可以通过......
  • 连续性区间位置查询——链式并查集
    目录问题概述思路分析参考代码做题总结问题概述这里给出两个题目,一个是上一篇的新春漫步(其实当时给的官方题解就是链式并查集的写法,但是当时我懒得写了,emmm),二是最近vp的一场cf_div3_923场的d题,准确来说,就是因为这个我才准备写这个的,题目大概就是给出一个长度为n的数组和q组询......
  • P3811 【模板】模意义下的乘法逆元
    原题链接题解由于时间限制过于严苛,遂采用线性递推方式\(p=k·i+b\),\((1\leqslantb<r<p)\)\(k·i+b=0\)\((mod\p)\)同时乘上\(i^{-1}\b^{-1}\)\(k·b^{-1}+i^{-1}=0\(mod\p)\)\(i^{-1}=-k·b^{-1}\(mod\p)\)\(i^{-1}=(-[\frac{p}{i}]+p)+(p\mod\i)^{-1}......
  • 各大排序的模板
    1.冒泡排序 1for(i=n;i>=1;--i)2{3for(j=1;j<=i;++j)4{5if(a[j]>a[j+1])6{7swap(a[j],a[j+1]);8}9}10}   2.快速排序1.懒人函数 1sort(a+1,a+n+1);   2.正常的1vo......
  • grafana模板参考
     空的,把面板都删除了{"__inputs":[{"name":"DS_PROMETHEUS","label":"Prometheus","description":"","type":"datasource","pl......
  • Link Cut Tree模板(从别人那里拿的)
    可以通过这道题#include<bits/stdc++.h>#defineRregisterint#defineIinlinevoid#defineGif(++ip==ie)if(fread(ip=buf,1,SZ,stdin))#definelcc[x][0]#definercc[x][1]usingnamespacestd;constintSZ=1<<19,N=3e5+9;charbuf[SZ],*ie=buf+SZ,*ip=......
  • BootstrapBlazor 模板适配移动设备使用笔记
    项目模板BootstrapBlazorApp模板为了方便大家利用这套组件快速搭建项目,作者制作了项目模板(ProjectTemplates),使用dotnetnew命令行模式,使用步骤如下:安装项目模板dotnetnewinstallBootstrap.Blazor.Templates::8.0.1创建工程dotnetnewbbapp官网教程https:......
  • Liquid模板引擎简单使用
    最近在写一个配置表导出工具,自动生成代码那边会用到模板引擎,所以就熟悉了下Liquid的使用。 需要用到一个DotLiquid的库usingDotLiquid;varlqTemplate=Template.Parse(templateContent);vartemplateHash=newHash();//todo逻辑部分using(varsw=newStrea......
  • 设计模式-模板方法模式(Template Method Pattern)
    #模板方法模式(TemplateMethodPattern)-记忆关键字:模板方法-定义:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤-类型:行为型-![UML类图](./design-pattern.png)##1.涉及的角色1)Abstr......