Pagini recente » Cod sursa (job #2798324) | Cod sursa (job #1725787) | Cod sursa (job #1319321) | Cod sursa (job #747052) | Cod sursa (job #373027)
Cod sursa(job #373027)
# include <cstdio>
# include <cstdlib>
using namespace std;
int *a[100002], n, m, t[100002], h[100002];
int rad (int x)
{
int y, tmp;
y=x;
while (t[x]) x=t[x];
while (y!=x)
tmp=y, y=t[y], t[tmp]=x;
return x;
}
void reuniune (int x, int y)
{
int rx, ry;
rx=rad(x);
ry=rad(y);
if (rx!=ry)
{
if (h[rx]>h[ry])
t[ry]=rx;
else
if (h[rx]<h[ry])
t[rx]=ry;
else
t[rx]=ry, h[ry]++;
}
}
int main ()
{
FILE *fin=fopen("disjoint.in", "r");
FILE *fout=fopen("disjoint.out", "w");
fscanf(fin, "%d", &n);
fscanf(fin, "%d", &m);
int c, x, y, i;
for (i=1;i<=n;i++)
{
a[i]=(int *) malloc (4);
a[i][0]=0;
}
for (;m;m--)
{
fscanf(fin, "%d %d %d", &c, &x, &y);
if (c==1)
reuniune(x, y);
else
if (rad(x)!=rad(y))
fprintf(fout, "NU\n");
else
fprintf(fout, "DA\n");
}
return 0;
}