Pagini recente » Cod sursa (job #955137) | Cod sursa (job #157819) | Cod sursa (job #364192) | Cod sursa (job #1886238) | Cod sursa (job #2805863)
#include <cstdio>
using namespace std;
FILE* f, * g;
int rang[100002], tata[100002];
int root(int nod)
{
int rad = nod;
while (rad != tata[rad])
rad = tata[rad];
return rad;
}
void unite(int rx, int ry)
{
if (rang[rx] < rang[ry])
tata[rx] = ry;
else
tata[ry] = rx;
if (rang[rx] == rang[ry])
++rang[rx];
}
int main()
{
f = fopen("disjoint.in", "r");
g = fopen("disjoint.out", "w");
int n, m, cod, x, y, rx, ry;
fscanf(f, "%d %d", &n, &m);
for (int i = 1;i <= n;++i) tata[i] = i;
for (int i = 1;i <= m;++i)
{
fscanf(f, "%d %d %d", &cod, &x, &y);
if (cod == 1)
{
rx = root(x);
ry = root(y);
unite(rx, ry);
}
else
{
rx = root(x);
ry = root(y);
if (rx != ry)
fprintf(g, "NU\n");
else
fprintf(g, "DA\n");
}
}
fclose(f);
fclose(g);
return 0;
}