Cod sursa(job #2629240)

Utilizator doyouhavethetimeStanculescu Gabriel doyouhavethetime Data 19 iunie 2020 17:10:56
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;

int *parent, *children;
int _find (int x) {
    if (parent[x]==x)
        return x;
    return parent[x]=_find(parent[x]);
}

void _union (int x, int y) {
    x=_find(x);
    y=_find(y);

    if (x!=y)
        if (children[x] > children[y]) {
            parent[x] = y;
            children[y] += children[x];
        }
        else {
            parent[y] = x;
            children[x] += children[y];
        }
}

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

    int n, m;
    fin >> n >> m;

    parent=new int[n+1];
    children=new int[n+1];

    iota(parent, parent+n+1, 0);
    fill(children, children+n+1, 1);

    int i, j, k;
    for (; m; m--) {
        fin >> k >> i >> j;
        if (k==1)
            _union(i, j);
        else
            fout << (_find(i) == _find(j)?"DA\n":"NU\n");
    }
    return 0;
}