Cod sursa(job #2393406)

Utilizator Bulboaca_EugenBulboaca Alexandru Eugen Bulboaca_Eugen Data 31 martie 2019 14:01:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 15;

std::vector <int> g[MAXN];

int father[MAXN];

int sizee[MAXN];

int findd(int x){

    if(father[x] == x) return x;

    return father[x] = findd(father[x]);

}

void unionn(int x, int y){

    int a = findd(x), b = findd(y);

    if(sizee[a] > sizee[b]) swap(a, b);

    sizee[b] += sizee[a];

    father[a] = b;

}

ifstream fin("disjoint.in");

ofstream fout("disjoint.out");

int main(){

    int n, m;

    fin >> n >> m;

    for(int i = 1; i <= n; ++i) father[i] = i, sizee[i] = 1;

    for(int i = 1; i <= m; ++i){

        int type, a, b;

        fin >> type >> a >> b;

        if(type == 1){

            unionn(a, b);

        }

        else{

            if(findd(a) == findd(b)) fout << "DA";

            else fout << "NU";

            fout << '\n';

        }

    }

    return 0;

}