Cod sursa(job #1392465)

Utilizator andru47Stefanescu Andru andru47 Data 18 martie 2015 17:51:14
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
using namespace std;
int n,que,t[100005],rang[100005],x,y,i,instr;
int findd(int x)
{
    if (t[x]==x)return x;
    else t[x]=findd(t[x]);
}
void uneste(int x,int y)
{
    x=findd(x);
    y=findd(y);
    if (rang[x]>rang[y])t[y]=x;
    else if (rang[x]<rang[y])t[x]=y;
    else
    {
        rang[x]++;
        t[y]=x;
    }
    return ;
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d\n",&n,&que);
    for (i=1; i<=n; i++)
        t[i]=i,rang[i]=1;
    for (i=1; i<=que; i++)
    {
        scanf("%d %d %d\n",&instr,&x,&y);
        if (instr==1)
        {
            uneste(x,y);
        }
        else
        {
            if (i!=que)
            {
                if (findd(x)==findd(y))printf("DA\n");
                else printf("NU\n");
            }
            else
            {
                if (findd(x)==findd(y))printf("DA");
                else printf("NU");
            }
        }
    }
    return 0;
}