Pagini recente » Cod sursa (job #3153257) | Cod sursa (job #2189393) | Cod sursa (job #1564075) | Cod sursa (job #1316859) | Cod sursa (job #1558995)
#include<stdio.h>
using namespace std;
const int N = 100005;
int h[N], v[N];
void init (int n)
{
int i;
for (i = 1; i <= n; i++)
{
h[i] = 1;
v[i] = i;
}
}
int gaseste (int x)
{
int r = x;
while (r != v[r])
r = v[r];
int aux;
while (x != v[x])
{
aux = v[x];
v[x] = r;
x = aux;
}
return r;
}
void uneste (int x, int y)
{
int radX = gaseste(x), radY = gaseste(y);
if (radX != radY)
{
if (h[radX] > h[radY])
v[radY] = radX;
else
{
if (h[radX] < h[radY])
v[radX] = radY;
else
{
v[radX] = radY;
h[radY]++;
}
}
}
}
int main ()
{
FILE *in, *out;
in = fopen ("disjoint.in", "r");
out = fopen ("disjoint.out", "w");
int n, m;
fscanf (in, "%d%d", &n, &m);
int i, cerinta, x, y;
init(n);
for (i = 1; i <= m; i++)
{
fscanf (in, "%d%d%d", &cerinta, &x, &y);
if (cerinta == 1)
uneste(x, y);
else
{
if (gaseste(x) == gaseste(y))
fprintf (out, "DA\n");
else
fprintf (out, "NU\n");
}
}
return 0;
}