Cod sursa(job #1474721)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 22 august 2015 17:49:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <cstdio>
using namespace std;
int n,mit,m[100008];

int rad(int x)
{
    int R,y;
    for(R=x;m[R]!=R;R=m[R]);
    for(;m[x]!=x;)
    {
        y=m[x];
        m[x]=R;
        x=y;
    }

    return R;
}

int unite(int x,int y)
{
    m[y]=m[x];
}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&mit);

    int i,op,x,y;
    for(i=1;i<=n;i++) m[i]=i;
    for(;mit;mit--)
    {
        scanf("%d%d%d",&op,&x,&y);
        if(op==2)
        {
            if(rad(x)==rad(y)) printf("DA\n");
                          else printf("NU\n");
        }
        else unite(rad(x),rad(y));
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}