Pagini recente » Cod sursa (job #2001583) | Istoria paginii runda/simulare-cartita-14b | Istoria paginii runda/razvy_round1/clasament | Cod sursa (job #114611) | Cod sursa (job #1856774)
#include<stdio.h>
using namespace std;
const int N = 100005;
int p[N];
void init (int n)
{
int i;
for (i = 1; i <= n; i++)
p[i] = i;
}
int rad (int x)
{
int r = p[x];
while (r != p[r])
r = p[r];
int aux;
while (x != r)
{
aux = p[x];
p[x] = r;
x = aux;
}
return r;
}
void uneste (int x, int y)
{
int radX = rad(x), radY = rad(y);
if (radX != radY)
p[radX] = p[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);
init (n);
int cerinta, x, y;
for (int i = 1; i <= m; i++)
{
fscanf (in, "%d%d%d", &cerinta, &x, &y);
if (cerinta == 1)
uneste (x, y);
else
{
if ((rad(x) == rad(y)))
fprintf (out, "DA\n");
else
fprintf (out, "NU\n");
}
}
return 0;
}