题解 | 并查集的实现
#include <iostream> using namespace std; int n,m,f[1000005]; void init(int n){ for(int i=1;i<=n;i++){ f[i]=i; } } int find(int i){ if(i!=f[i]){ f[i]=find(f[i]); } return f[i]; } void uni(int a,int b){ f[find(a)]=find(b); } bool issameset(int a,int b){ return find(a)==find(b); } int main() { cin>>n>>m; init(n); for(int i=0,t,a,b;i<m;i++){ scanf("%d %d %d",&t,&a,&b); if(t==1){ if(issameset(a,b)){ cout<<"Yes\n"; } else cout<<"No\n"; } else{ uni(a,b); } } }
左56