Pagini recente » Istoria paginii monthly-2014/runda-4/probleme | Ședință 2009-11-03 | Statistici Nathan Wildenberg (thewildnath) | Istoria paginii grigore-moisil-2009/11-12 | Cod sursa (job #228367)
Cod sursa(job #228367)
# include <stdio.h>
# define FIN "disjoint.in"
# define FOUT "disjoint.out"
# define MAXN 100005
int N, M, a, b, op, i;
int T[MAXN];
int H[MAXN];
int tata(int nod)
{
while (T[nod])
nod = T[nod];
return nod;
}
void verif(int x, int y)
{
int f1, f2;
f1 = tata(x);
f2 = tata(y);
if (f1 == f2)
printf("DA\n");
else
printf("NU\n");
}
void uneste(int x, int y)
{
int f1, f2;
f1 = tata(x);
f2 = tata(y);
if (f1 != f2)
{
if (H[f1] < H[f2])
T[f1] = f2;
if (H[f1] > H[f2])
T[f2] = f1;
if (H[f1] == H[f2])
{
T[f1] = f2;
H[f2]++;
}
}
}
int main()
{
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d %d",&N,&M);
for (i = 1; i <= M; ++i)
{
scanf("%d%d%d",&op,&a,&b);
if (op == 1)
uneste(a, b);
if (op == 2)
verif(a, b);
}
return 0;
}