Cod sursa(job #2485836)

Utilizator sichetpaulSichet Paul sichetpaul Data 2 noiembrie 2019 09:37:13
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int N, M;
int father[Nmax], h[Nmax];
int root(int node) {
    int ans;
    while (node) {
        ans = node;
        node = father[node];
    }
    return ans;
}
int main()
{
    f >> N >> M;
    for (int m = 1; m <= M; ++m) {
        int tip, x, y;
        f >> tip >> x >> y;
        if (tip == 1) {
            int rx = root(x), ry = root(y);

            if (h[rx] >= h[ry]) father[y] = rx;
            else father[x] = ry;
            if (h[rx] == h[ry]) ++h[rx];
        }
        else {
          if (root(x) == root(y)) g << "DA\n";
          else g << "NU\n";
        }
    }
    return 0;
}