Cod sursa(job #2670812)

Utilizator mihhTURCU MIHNEA ALEXANDRU mihh Data 10 noiembrie 2020 18:41:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int MX=300000;

int m,n;

int link[MX], siz[MX], mxsz=1;

int find(int x){
    if(link[x]==x) return x;
    int l=find(link[x]);
    link[x]=l;
    return l;
}

void unite(int x, int y){
    x=find(x), y=find(y);
    if(siz[x]<siz[y]) swap(x,y);
    link[y]=x;
    siz[x]+=siz[y];
    mxsz=max(siz[x],mxsz);
}




int main(){
    fin>>n>>m;
    for(int i=1;i<=n;++i)
        siz[i]=1, link[i]=i;
    for(int i=m;i--;){
        int x,y, t;
        fin>>t;
        switch(t){
            case 1:
                fin>>x>>y;
                unite(x,y);
                break;
            case 2:
                fin>>x>>y;
                x=find(x), y=find(y);
                fout<<(x==y?"DA":"NU")<<"\n";
                break;
            case 3:
                fout<<mxsz<<"\n";
                break;

        }
    }
}