link
https://www.luogu.org/problemnew/show/P1551
Code
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=1e5; int par[maxn]; int rank1[maxn]; void f(int n) //初始化 { for(int i=0;i<n;i++) { par[i]=i; rank1[i]=0; } } int find(int x) { if(par[x]==x) { return x; } else { return par[x]=find(par[x]); } } void unite(int x,int y) { x=find(x); y=find(y); if(x==y) return ; if(rank1[x]<rank1[y]) { par[x]=y; } else { par[y]=x; } if(rank1[x]==rank1[y]) rank1[x]++; } int main() { int n,p,m,x,y; cin>>n>>m>>p; f(n); for(int i=1;i<=m;i++) { cin>>x>>y; unite(x,y); } for(int i=1;i<=p;i++) { cin>>x>>y; if(find(x)==find(y)) printf("Yes\n"); else printf("No\n"); } return 0; }