Cod sursa(job #2940747)

Utilizator Andoss1710Balanica Andrei Andoss1710 Data 16 noiembrie 2022 12:17:46
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n, m;
int parinte[100001], inaltime[100001];

int Reprez(int i){
    while(parinte[i]!=-1)
        i = parinte[i];
    return i;

}

void reuneste(int i, int j){
    int r1, r2;
    r1 = Reprez(i);
    r2 = Reprez(j);
    if(inaltime[r1] > inaltime[r2])
        parinte[r2] = r1;
    else{
        parinte[r1] = r2;
        if(inaltime[r1]==inaltime[r2])
            inaltime[r2] += 1;
    }

}

int main()
{
    fin>>n>>m;
    for(int i = 1; i <=n; i++){
        parinte[i] = -1;
        inaltime[i] = 1;
    }
    for(int i = 0; i < m; i++){
        int op, x, y;
        fin>>op>>x>>y;
        if(op==1){
            reuneste(x, y);
        }
        else{
            if(Reprez(x) == Reprez(y))
                fout<<"DA";
                else
                    fout<<"NU";
                fout<<"\n";
        }
    }
    return 0;
}