【模板】并查集

只是再自己打一遍熟悉一些

#include<iostream>
#include<cstdio>
using namespace std;
#define tcl(a,b,c) for(a=b;a<=c;a++)
int f[100001];
int get(int x)
{
    if(f[x]==x)
         return x;
    else 
    {
        f[x]=get(f[x]);
        return f[x];
    }
}
void join(int a,int b)
{
    int t1,t2;
    t1=get(a);
    t2=get(b);//这里不能直接赋值不知道为什么..
    if(t1!=t2)
        f[t2]=t1;
    return;
}
void find(int a,int b)
{
    int t1,t2;
    t1=get(a);
    t2=get(b);
    if(t1==t2) 
    {
        printf("Y\n");return;
    }
    printf("N\n");
}
int main()
{
    int n,m,i,t,a,b;
    scanf("%d%d",&n,&m);
    tcl(i,1,n) f[i]=i;
    tcl(i,1,m)
    {
        scanf("%d%d%d",&t,&a,&b);
        if(t==1) 
        {
            join(a,b);
        }
        else
        {
            find(a,b);
        }
    }
    return 0;
}
posted @ 2018-07-15 22:57  JerryVoider  阅读(97)  评论(0编辑  收藏  举报