Cod sursa(job #1984003)

Utilizator OlivianOlivian Dan Cretu Olivian Data 23 mai 2017 12:09:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>
#include <algorithm>

using namespace std;


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()
{
    freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
    int n, m, tip, x, y;
    scanf("%d%d",&n,&m);
    for(int i = 1; i <= n; ++i)
    {
        rad[i] = i;
        h[i] = i;
    }
    for(int i = 1; i <= m; ++i)
    {
        scanf("%d%d%d",&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))
            printf("DA\n");
        else
            printf("NU\n");
    }
}