Luo Gu P1551 relatives (disjoint-set template title)

link

https://www.luogu.org/problemnew/show/P1551

Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int  maxn=1e5;
int par[maxn];
int rank1[maxn];

void f(int n) //初始化 
{
    for(int i=0;i<n;i++)
    {
        par[i]=i;
        rank1[i]=0;
     } 
}
int find(int x)
{
    if(par[x]==x)
    {
        return x;
    }
    else
    {
        return par[x]=find(par[x]);
    }
}
void unite(int x,int y)
{
    x=find(x);
    y=find(y);
    if(x==y)
    return ;
    if(rank1[x]<rank1[y])
    {
        par[x]=y;
    }
    else
    {
        par[y]=x;
    }
    if(rank1[x]==rank1[y])
    rank1[x]++;
}
int main()
{
    
    int n,p,m,x,y;
    cin>>n>>m>>p;
    f(n);
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y;
        unite(x,y);
    }    
    for(int i=1;i<=p;i++)
    {
        cin>>x>>y; 
        if(find(x)==find(y))
        printf("Yes\n");
        else
        printf("No\n");
    } 
    return 0;
}

 

Guess you like

Origin www.cnblogs.com/hh13579/p/11233209.html