1 条题解

  • 0
    @ 2025-3-27 19:39:19
    #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
    上传者