洛谷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亲戚 并查集的主要内容,如果未能解决你的问题,请参考以下文章
P5836 [USACO19DEC]Milk Visits S 从并查集到LCA(最近公共祖先) Tarjan算法 (初级)