Cod sursa(job #1228629)

Utilizator george_stelianChichirim George george_stelian Data 14 septembrie 2014 19:39:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>

using namespace std;

int rad[100010],dim[100010],n,m,i,a,x,y;

void unire(int x,int y)
{
    if(dim[x]>=dim[y]) rad[y]=x;
    else rad[x]=y;
    if(dim[x]==dim[y]) dim[x]++;
}

int radacina(int x)
{
    int i,j;
    for(i=x;rad[i]!=i;i=rad[i]);
    for(j=x;rad[j]!=i;j=rad[j]) rad[j]=i;
    return i;
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        rad[i]=i;
        dim[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&a,&x,&y);
        if(a==1) unire(radacina(x),radacina(y));
        else if(radacina(x)==radacina(y)) printf("DA\n");
             else printf("NU\n");
    }
    return 0;
}