Pagini recente » Cod sursa (job #1420154) | Cod sursa (job #3156780) | Cod sursa (job #1118461) | Cod sursa (job #1238728) | Cod sursa (job #2455157)
#include <bits/stdc++.h>
#define NMAX 100000
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, rr[NMAX + 6], pp[NMAX + 6];
int Find(int x)
{
int R = x;
for (; pp[R] != R; R = pp[R]);
while (pp[x] != x)
{
pp[x] = R;
x = pp[x];
}
return R;
}
void Unite(int x, int y)
{
int p1 = Find(x);
int p2 = Find(y);
if (p1 == p2)
return;
if (rr[p1] >= rr[p2])
{
if (rr[p1] == rr[p2])
{
rr[p1]++;
pp[p2] = p1;
}
else
{
pp[p2] = p1;
}
}
else
{
pp[p1] = p2;
}
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; ++i)
pp[i] = i;
while (m--)
{
int p, x, y;
fin >> p >> x >> y;
if (p == 1)
{
Unite(x, y);
}
else
{
if (Find(x) == Find(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
fin.close();
fout.close();
return 0;
}