Cod sursa(job #1920004)

Utilizator george_stelianChichirim George george_stelian Data 9 martie 2017 22:00:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int rad[100010],h[100010];

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

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]=1;
    }
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d",&tip,&x,&y);
        if(tip==1)
        {
            x=radacin(x);y=radacin(y);
            if(h[x]<h[y]) swap(x,y);
            rad[y]=x;
            if(h[x]==h[y]) h[x]++;
        }
        else if(radacin(x)==radacin(y)) printf("DA\n");
        else printf("NU\n");
    }
    return 0;
}