并查集
Posted Magic_chao不负青春
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并查集相关的知识,希望对你有一定的参考价值。
#include<iostream> using namespace std; int id[100001],si[100001]; int ifind(int p){ while(p!=id[p]){ id[p]=id[id[p]];//父节点为爷爷节点,路径压缩 p=id[p]; } return p; } void iunion(int p,int q){ int i=ifind(p); int j=ifind(q); if(i==j) return; if(si[i]<si[j]){ id[i]=j; si[j]+=si[i]; }else{ id[j]=i; si[i]+=si[j]; } } int main(){ int n,m,p; while(cin>>n>>m>>p){ for(int i=1;i<=n;i++){ id[i]=i; si[i]=1; } int ai,bi; for(int i=1;i<=m;i++){ cin>>ai>>bi; iunion(ai,bi); } for(int i=1;i<=p;i++){ cin>>ai>>bi; if(ifind(ai)==ifind(bi)) cout<<"Yes"<<endl; else cout<<"No"<<endl; } } return 0; }
以上是关于并查集的主要内容,如果未能解决你的问题,请参考以下文章