1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int f[2000010],ht[2000010]; int a,b,c,n,m; int find(int k){ if(f[k]==k) return k; else{ f[k]=find(f[k]); return f[k]; } } void Union(int a,int b){ a=find(a),b=find(b); if(ht[a]>ht[b]) swap(a,b); ht[b]=max(ht[b],ht[a]+1); f[a]=b; } bool check(int a,int b){ if(find(a)==find(b)) return true; return false; } int main(){ scanf("%d %d",&n,&m); for(int i=1;i<=n;i++) f[i]=i,ht[i]=1; for(int i=1;i<=m;i++){ scanf("%d %d %d",&a,&b,&c); if(a==1) Union(b,c); else{ if(check(b,c)==true) printf("Y\n"); else printf("N\n"); } } return 0; }
- 1
信息
- ID
- 7397
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 49
- 已通过
- 29
- 上传者