模板:路径压缩并查集

  #include<bits/stdc++.h>

using namespace std;
#define ll long long
#define N 2000001
#define maxn 5000
inline ll read()
{
    ll f=1,x=0;char ch=getchar();
    while(ch>'9'||ch<'0'){if(ch=='-')f=-1; ch=getchar();}
    while (ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return f*x;
}
int fa[N];
int find(int x)
{
    if(fa[x]==x)return x;
    else return fa[x]=find(fa[x]);
}
void judge(int x,int y)
{
    if(find(x)==find(y))printf("Y\n");
    else printf("N\n");
}
int main()
{
    int n=read(),m=read();
    for(int i=1;i<=n;i++)
    {
        fa[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        int opt=read();int a=read(),b=read();
        if(opt==1)
        {
            
            fa[find(a)]=find(b);
        }
        else judge(a,b);
    }
}

 

posted @ 2020-04-16 10:52  cure_zero  阅读(92)  评论(0)    收藏  举报