Cod sursa(job #2021475)

Utilizator mihailarminia1234Arminia Mihail mihailarminia1234 Data 13 septembrie 2017 19:12:57
Problema Paduri de multimi disjuncte Scor 10
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;

inline int root(int nod)
{
        int R = nod;
        while(TT[R] != R) R = TT[R];
        while(TT[nod] != nod)
        {
                int next = TT[nod];
                TT[nod] = R;
                nod = next;
        }
        return R;
}

inline 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(x, y);
                else
                {
                        if(root(x) != root(y)) g << "NU\n";
                        else g << "DA\n";
                }
        }
        return 0;
}