Cod sursa(job #1846207)
Utilizator | Data | 12 ianuarie 2017 12:46:55 | |
---|---|---|---|
Problema | Paduri de multimi disjuncte | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.19 kb |
#include <cstdio>
int n,k;
const int Q=100007;
int t[Q];
int radacinare(int x)
{
if(t[x]==0)
return x;
t[x]=radacinare(t[x]);
return t[x];
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&k);
int l,x,y,act,ry;
for(int i=1; i<=k; i++)
{
scanf("%d%d%d",&l,&x,&y);
if(x>y)
{
act=x;
x=y;
y=act;
}
if(l==1)
{
/*
act=radacinare(x);
ry=radacinare(y);
t[ry]=act;
while(ry!=act)
{
t[ry]=act;
ry=radacinare(ry-1);
}
*/
t[radacinare(y)]=radacinare(x);
}
else
{
/*
act=radacinare(y);
if(act<=x)
{
printf("DA\n");
}
else
{
printf("NU\n");
}
*/
if(radacinare(x)==radacinare(y))
{
printf("DA\n");
}
else
printf("NU\n");
}
}
return 0;
}