Pagini recente » Cod sursa (job #3281690) | Cod sursa (job #2540632) | Cod sursa (job #2207109) | Cod sursa (job #1123289) | Cod sursa (job #587422)
Cod sursa(job #587422)
#include <stdio.h>
#define maxn 100333
int n, m;
int group[maxn], level[maxn];
void union_groups(int i1, int i2)
{
if (level[i1] > level[i2])
group[i2] = i1;
else if (level[i1] < level[i2])
group[i1] = i2;
else
group[i1] = i2, level[i1]++;
}
int lookup(int i)
{
if (group[i] == i)
return i;
return group[i] = lookup(group[i]);
}
int main()
{
int i,j;
FILE *fin = fopen("disjoint.in", "rt"), *fout = fopen("disjoint.out", "wt");
fscanf(fin, "%d %d", &n, &m);
for (i=1; i<=n; i++)
group[i] = i;
int op, x, y;
for (i=1; i<=m; i++)
{
fscanf(fin, "%d %d %d", &op, &x, &y);
if (op == 1)
{
union_groups(lookup(x), lookup(y));
}
else
{
int f_x = lookup(x), f_y = lookup(y);
if (f_x == f_y)
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
}
fclose(fin), fclose(fout);
return 0;
}