Cod sursa(job #2682902)

Utilizator gasparrobert95Gaspar Robert Andrei gasparrobert95 Data 9 decembrie 2020 21:09:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, rad[100005], card[100005];

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

void Unite(int x, int y) {
    if (card[x] < card[y])
        swap(x, y);
    rad[y] = x;
    card[x] += card[y];
    return;
}

int main() {
    fin >> n >> m;
    for (int i = 1; i <= n; ++i)
        rad[i] = i, card[i] = 1;
    while (m--) {
        int op, x, y;
        fin >> op >> x >> y;
        if (op == 1) {
            int a = Find(x), b = Find(y);
            if (a != b)
                Unite(a, b);
        }
        else {
            if (Find(x) == Find(y))
                fout << "DA\n";
            else
                fout << "NU\n";
        }
    }
    return 0;
}