Cod sursa(job #1144455)

Utilizator j.loves_rockJessica Joanne Patrascu j.loves_rock Data 17 martie 2014 09:45:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

using namespace std;
int t[100010],r[100010],x,y,i,n,m,a,xx,yy;
int caut(int x)
{
    int j;
    for (j=x; j!=t[j]; j=t[j]);
    while(t[x]!=x)
    {
        int aux=t[x];
        t[x]=j;
        x=aux;
    }
    return j;

}
void merge(int x, int y)
{
    if (r[x]>r[y])
        t[y]=x;
    else t[x]=y;
    if (r[x]==r[y])
        r[y]++;
}
int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1; i<=n; ++i)
    {
        t[i]=i;
        r[i]=1;
    }
    for (i=1; i<=m; ++i)
    {
        scanf("%d%d%d",&a,&x,&y);
        xx=caut(x);
        yy=caut(y);
        if (a==1) merge(xx,yy);
        else
        {
            if (xx==yy) printf("DA\n");
            else printf("NU\n");
        }
    }
    return 0;
}