Vijos 1034 家族 ( 并查集 )

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#define N 100010

int n,m,Q;
int fa[N];

inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}

int Find(int x)
{
    return x==fa[x]?x:fa[x]=Find(fa[x]);
}

void Union(int x,int y)
{
    int root1=Find(x),root2=Find(y);
    if(root1!=root2)
        fa[root1]=root2;
}

int main()
{
    n=read();m=read();Q=read();
    for(int i=1;i<=n;i++)
        fa[i]=i;
    for(int i=1;i<=m;i++)
    {
        int x=read(),y=read();
        Union(x,y);
    }
    for(int i=1;i<=Q;i++)
    {
        int x=read(),y=read();
        if(Find(x)!=Find(y))
            puts("No");
        else puts("Yes");
    }
    return 0;
}

你可能感兴趣的:(并查集)