Cod sursa(job #2762426)

Utilizator Bulboaca_EugenBulboaca Alexandru Eugen Bulboaca_Eugen Data 7 iulie 2021 08:08:19
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;

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

const int MAXN = 1e5 + 2;
const int INF = 1e8 ;

int father[MAXN], sizee[MAXN];

int findd(int node){

    if(node == father[node]) return node;
    return father[node] = findd(father[node]);

}

void unionn(int x, int y){

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

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

    father[a] = b;
    sizee[b] += sizee[a];

}

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, x, y;
        fin >> type >> x >> y;
        if(type == 1)
            unionn(x, y);
        else {
            if(findd(x) == findd(y))
                fout << "DA";
            else fout << "NU";
            fout << '\n';
        }
    }


    return 0;
}