P1551 亲戚 并查集题解
P1551 亲戚
是一题经典的并查集的应用,有亲戚关系的为一个集合。
#include<iostream> using namespace std; const int maxn=5010; int pre[5010]; int n,m,p; void make()//初始化 { for (int i=1;i<=n;i++) { pre[i]=i; } } int find(int x)//并查集的查操作,带路径压缩 { int r=x; while (pre[r]!=r) { r=pre[r]; } int i=x,j; while (i!=r) { j=pre[i]; pre[i]=r; i=j; } return r; } void Union(int x,int y)//并查集的并操作 { int fx=find(x); int fy=find(y); if (fx!=fy) { pre[fx]=fy; } } int main() { cin>>n>>m>>p; make(); for (int i=1;i<=m;i++) { int x,y; cin>>x>>y; Union(x,y); } for (int i=1;i<=p;i++) { int x,y; cin>>x>>y; if (find(x)==find(y)) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } }