洛谷P1551親戚 並查集
阿新 • • 發佈:2017-07-08
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 ]) ; } inlinevoid 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親戚 並查集