Cod sursa(job #2440134)

Utilizator AlexandruGabrielAliciuc Alexandru AlexandruGabriel Data 17 iulie 2019 16:53:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
#define N 100005

using namespace std;

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

int n, m, p, a, b, T[N];

int Radacina (int x)
{
    int rad = x;
    while (T[rad] != rad)
        rad = T[rad];
    while (T[x] != x)
    {
        int y = x;
        x = T[x];
        T[y] = rad;
    }
    return rad;
}

void Uneste(int x, int y)
{
    int rx = Radacina(x), ry = Radacina(y);
    T[ry] = rx;
}

int main()
{
    fin >> n >> m;

    for (int i = 1; i <= n; i++)
        T[i] = i;

    while (m--)
    {
        fin >> p;
        fin >> a >> b;
        if (p == 1)
            Uneste(a, b);
        else
        {
            if (Radacina(a) == Radacina(b))
                fout << "DA\n";
            else fout << "NU\n";
        }
    }
    return 0;
}