Cod sursa(job #1942982)

Utilizator RaduGiucleaGiuclea Radu RaduGiuclea Data 28 martie 2017 12:13:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
using namespace std;
int tata[100002],niv[100002];
int myfind(int a)
{
    int ok=1;
    while(ok)
        if(tata[a])
            a=tata[a];
        else ok=0;
    return a;
}
void myunion(int t1,int t2)
{
    if(niv[t1]<niv[t2])
        tata[t1]=t2;
    else if(niv[t2]<niv[t1])
        tata[t2]=t1;
    else tata[t2]=t1,niv[t1]++;
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int n,m,i,p,x,y,t1,t2;
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d%d",&p,&x,&y);
        t1=myfind(x);
        t2=myfind(y);
        if(p==1)
            myunion(t1,t2);
       else
            if(t1==t2)
                printf("DA\n");
            else printf("NU\n");
    }
    return 0;
}