Cod sursa(job #2021506)

Utilizator mihailarminia1234Arminia Mihail mihailarminia1234 Data 13 septembrie 2017 20:26:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int TT[100005], n, Q, cod, x, y;

int root(int nod)
{
        int R = nod, next;

        while(TT[R] != R) R = TT[R];

        while(TT[nod] != nod)
        {
                next = TT[nod];
                TT[nod] = R;
                nod = next;
        }

        return R;
}

void unite(int x, int y)
{
        TT[y] = x;
}

int main()
{
        f >> n >> Q;
        for(int i = 1; i <= n; ++i) TT[i] = i;
        for(int i = 1; i <= Q; ++i)
        {
                f >> cod >> x >> y;
                if(cod == 1) unite(root(x), root(y));
                else
                {
                        if(root(x) == root(y)) g << "DA\n";
                        else g << "NU\n";
                }
        }
        return 0;
}