Cod sursa(job #1960043)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 10 aprilie 2017 10:09:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int Max = 100007;
int rad[Max], h[Max];

int kok(int nr)
{
    int y = nr;
    for(; nr != rad[nr]; nr =rad[nr]);
    while(y != nr)
    {
        int aux = rad[y];
        rad[y] = nr;
        y = aux;
    }
    return nr;
}

int main()
{
    int n, m, tip, x, y;
    in >> n >> m;
    for(int i = 1; i <= n; ++i)
    {
        rad[i] = i;
        h[i] = i;
    }
    for(int i = 1; i <= m; ++i)
    {
        in >> tip >> x >> y;
        if(tip == 1)
        {
            x = kok(x);
            y = kok(y);
            rad[y] = x;
            if(h[x] == h[y])
                h[x]++;
        }
        else if(kok(x) == kok(y))
            out << "DA\n";
        else
            out << "NU\n";
    }
}