Cod sursa(job #2948839)

Utilizator DianaDorneanuDorneanu Diana DianaDorneanu Data 28 noiembrie 2022 16:07:55
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;

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

vector<int> t, h;

int Radacina(int x){
    while(x!=t[x])
        x=t[x];
    return x;
}

int Unificare(int x, int y){
    /// x si y sunt radacinile arborilor care se unifica
    if(h[x]>h[y]){
        t[y]=x;
    }
    else if(h[y]>h[x])
        t[x]=y;

    else{
        h[x]++;
        t[y]=x;
    }
}

int main(){
    int n, m, c, x, y, rx, ry;
    fin>>n>>m;
    t.assign(n+1, 0);
    h.assign(n+1, 1);

    for(int i=1;i<=n;++i)
        t[i]=i;

    for(int i=1;i<=m;++i){
        fin>>c>>x>>y;
        rx=Radacina(x);
        ry=Radacina(y);
        if(c==1){
            if(rx!=ry)
                Unificare(rx, ry);
        }
        else{
            if(rx==ry)
                fout<<"DA\n";
            else fout<<"NU\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}