Cod sursa(job #2946974)

Utilizator 11111theodorSebastian Theodor-Ioan 11111theodor Data 25 noiembrie 2022 15:03:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <vector>

using namespace std;
const int N = 1e5 + 1;

int t[N], rang[N];

int Find(int x)
{
    if (t[x] == 0)
        return x;
    int y = Find(t[x]);
    t[x] = y;
    return y;
}

void Union(int x, int y)
{
    if (rang[x] > rang[y])
        swap(x, y);
    t[x] = y;
    if (rang[x] == rang[y]) rang[y]++;
}

int main()
{
    ifstream fin ("disjoint.in");
    ofstream fout ("disjoint.out");
    int n, m;
    fin >> n >> m;
    while (m--)
    {
        int op, x, y;
        fin >> op >> x >> y;
        x = Find(x);
        y = Find(y);
        if (op == 1)
        {
            if (x != y)
                Union(x, y);
        }
        else fout << ((x == y) ? "DA\n" : "NU\n");
    }
    fin.close();
    fout.close();
}