Cod sursa(job #2302662)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 14 decembrie 2018 23:04:22
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.56 kb
#include<stdio.h>
int n,m,x,y,z,p[100001],r[100001];
int F(int x)
{
	for(;p[x]!=x;x=p[x]);
	return x;
}
int main() 
{
    freopen("disjoint.in","r",stdin),freopen("disjoint.out","w",stdout),scanf("%d%d",&n,&m);
    for(x=1;x<=n;x++)
        p[x]=x;
    while(m--) 
	{
        scanf("%d%d%d",&x,&y,&z),y=F(y),z=F(z);
        if(x==1) 
		{
            if(r[y]>r[z])
            	p[z]=y;
            else
            	p[y]=z;
            if(r[y]==r[z])
                r[z]++;
        }
        else
            printf("%s\n",y==z?"DA":"NU");
    }
}