Cod sursa(job #2398427)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 5 aprilie 2019 14:57:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int t[100005], niv[100005];

int main()
{
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        t[i] = -1;
        niv[i] = 1;
    }
    while (m--)
    {
        int op, x, y;
        fin >> op >> x >> y;
        if (op == 1)
        {
            int rx = x, ry = y;
            while (x != -1)
            {
                rx = x;
                x = t[x];
            }
            while (y != -1)
            {
                ry = y;
                y = t[y];
            }
            if (niv[rx] >= niv[ry])
            {
                niv[rx] = max(niv[rx], niv[ry] + 1);
                t[ry] = rx;
            }
            else
                t[rx] = ry;
        }
        else
        {
            int rx = x, ry = y;
            while (x != -1)
            {
                rx = x;
                x = t[x];
            }
            while (y != -1)
            {
                ry = y;
                y = t[y];
            }
            if (rx == ry)
                fout << "DA" << '\n';
            else
                fout << "NU" << '\n';
        }
    }
    return 0;
}