Pagini recente » Cod sursa (job #1737570) | Cod sursa (job #2841772) | Cod sursa (job #1645281) | Cod sursa (job #2246444) | Cod sursa (job #2572876)
#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
FILE* fin=fopen("disjoint.in", "r");
FILE* fout=fopen("disjoint.out", "w");
int n, m, rang[100001], tata[100001];
int Gasire(int x)
{
int r=x, y;
while (r!=tata[r])
r=tata[r];
while (tata[x]!=x)
{
y=tata[x];
tata[x]=r;
x=y;
}
return r;
}
void Unire(int x, int y)
{
if (rang[x]>rang[y])
tata[y]=x;
else
tata[x]=y;
if (rang[x]==rang[y])
{
rang[y]++;
}
}
int main()
{
fscanf(fin, "%d%d", &n, &m);
for (int i=1; i<=n; i++)
{
rang[i]=1;
tata[i]=i;
}
for (int i=1; i<=m; i++)
{
int c, x, y;
fscanf(fin, "%d%d%d", &c, &x, &y);
if (c==1)
{
if (Gasire(x)!=Gasire(y))
Unire(Gasire(x), Gasire(y));
}
else
{
if (Gasire(x)==Gasire(y))
fprintf(fout, "DA\n");
else
fprintf(fout, "NU\n");
}
}
return 0;
}