Cod sursa(job #2302660)
Utilizator | Data | 14 decembrie 2018 23:00:12 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | c-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.59 kb |
#include<stdio.h>
int n,m,x,y,z,c,d,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);
if(x==1)
{
c=F(y),d=F(z);
if(r[c]>r[d])
p[d]=c;
else
p[c]=d;
if(r[c]==r[d])
r[d]++;
}
else
printf("%s\n",F(y)==F(z)?"DA":"NU");
}
}