洛谷P1551亲戚 并查集

Posted third2333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷P1551亲戚 并查集相关的知识,希望对你有一定的参考价值。

洛谷P1551亲戚   并查集  按秩合并 + 路径压缩

 

#include <bits/stdc++.h>
using namespace std ; 

const int N = 5011 ; 
int fa[N],rk[N] ; 
int n,m,Q ; 

inline void init() 
{
    for(int i=1;i<=n;i++) fa[ i ] = i,rk[ i ] = 1 ; 
}

inline int find(int x) 
{
    if(x==fa[ x ]) return x ; 
    return fa[ x ] = find(fa[ x ]) ; 
}

inline void Union(int x,int y) 
{
    x = find(x) ; y = find(y) ; 
    if(x==y) return ; 
    if(rk[ x ] < rk[ y ])                          //   并查集  按秩合并    
        fa[ x ] = y ;                              //   按照深度大小合并,实际上也是按照子树大小合并 
    else
    {
        fa[ y ] = x ; 
        if(rk[ x ]==rk[ y ]) rk[ x ]++ ;  
    }
}

int main() 
{
    scanf("%d%d%d",&n,&m,&Q) ; 
    init() ;  
    int x,y ; 
    for(int i=1;i<=m;i++) 
    {
        scanf("%d%d",&x,&y) ; 
        Union(x,y) ; 
    }
    for(int i=1;i<=Q;i++) 
    {
        scanf("%d%d",&x,&y) ; 
        if(find( x )==find( y )) 
            printf("Yes\n") ; 
        else
            printf("No\n") ; 
    }
    return 0 ; 
}

 

以上是关于洛谷P1551亲戚 并查集的主要内容,如果未能解决你的问题,请参考以下文章

洛谷——P1551 亲戚

并查集 以及基础试题讲解

codevs1073/P1551家族/亲戚——并查集

P5836 [USACO19DEC]Milk Visits S 从并查集到LCA(最近公共祖先) Tarjan算法 (初级)

并查集

并查集