Cod sursa(job #2711864)

Utilizator gasparrobert95Gaspar Robert Andrei gasparrobert95 Data 24 februarie 2021 19:49:05
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, tata[100005], fv[100005];

int Find (int x) {
    if (tata[x] == x)
        return x;
    tata[x] = Find(tata[x]);
    return tata[x];
}

void Union (int x, int y) {
    int radx = Find(x), rady = Find(y);
    if (fv[radx] < fv[rady]) {
        fv[rady] += fv[radx];
        tata[radx] = rady;
    }
    else {
        fv[radx] += fv[rady];
        tata[rady] = radx;
    }
    return;
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= n; ++i)
        tata[i] = i, fv[i] = 1;
    while (m--) {
        int op, x, y;
        fin >> op >> x >> y;
        if (op == 1)
            Union(x, y);
        else {
            if (Find(x) == Find(y))
                cout << "DA\n";
            else
                cout << "NU\n";
        }
    }
    return 0;
}