zoukankan      html  css  js  c++  java
  • 洛谷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
    ") ; 
            else
                printf("No
    ") ; 
        }
        return 0 ; 
    }
  • 相关阅读:
    FFT入门
    FJOI省队集训 chessboard
    FJOI省队集训 florida
    树上莫队
    NOIP2015 Revenge
    APIO2013 tasksauthor
    油漆门
    一些字符串有关的题目
    字符串题模板集合
    sg函数与博弈论2
  • 原文地址:https://www.cnblogs.com/third2333/p/7135636.html
Copyright © 2011-2022 走看看