Luo Gu P3367 disjoint-set [template]


Require compression path

#include<bits/stdc++.h>
using namespace std;
int arr[10010]={0};
int find(int a)
{//路径压缩 
//  if(arr[a]==a)return a;
//  return arr[a]=find(arr[a]);
    if(arr[a]!=a) 
        arr[a]=find(arr[a]);    
    return arr[a];
}
int main()
{
    int m,n;cin>>n>>m;
    for(int i=0;i<10010;i++)
        arr[i]=i;
    for(int i=0;i<m;i++)
    {
        int z;cin>>z;
        if(z==1)
        {
            int a,b;cin>>a>>b;
            arr[find(a)]=find(b);//a根设为b的孩子 
        }
        if(z==2)
        {
            int a,b;cin>>a>>b;
            if(find(a)==find(b))cout<<"Y"<<endl;
            else cout<<"N"<<endl;
        }
    }
    
    return 0;
} 

Guess you like

Origin www.cnblogs.com/tldr/p/11135940.html