Cod sursa(job #2293128)

Utilizator dragos99Homner Dragos dragos99 Data 30 noiembrie 2018 16:21:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
using namespace std;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
int tata[100001], rang[100001], n, m;

int rad(int x){
    if(tata[x] == 0){
        return x;
    }
    else{
        int y = rad(tata[x]);
        tata[x] = y;
        return y;
    }
}

void leaga_componentele(int x, int y){
    int radx = rad(x);
    int rady = rad(y);
    if(radx != rady){
        if(rang[radx] > rang[rady]){
            tata[rady] = radx;
        }
        else if(rang[radx] < rang[rady]){
            tata[radx] = rady;
        }
        else{
            tata[radx] = rady;
            rang[radx] ++;
        }
    }
}

int main()
{
int x, y, cerinta;
f>>n>>m;
for(int i = 0 ; i < m ; i++){
    f>>cerinta>>x>>y;
    if(cerinta == 1){
        leaga_componentele(x, y);
    }
    else{
        if(rad(x) == rad(y))
            g<<"DA";
        else
            g<<"NU";
        g<<'\n';
    }

}

return 0;
}