1. 程式人生 > >洛谷P1551親戚 並查集

洛谷P1551親戚 並查集

con ++ i++ void amp using blog print 壓縮

洛谷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親戚 並查集