Pagini recente » Cod sursa (job #156355) | Cod sursa (job #367448) | Cod sursa (job #633481) | Cod sursa (job #1812470) | Cod sursa (job #2364052)
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, dad[Nmax], rang[Nmax];
void init()
{
for (int i = 1; i <= n; ++i) {
dad[i] = i;
rang[i] = 1;
}
}
void find(int node)
{
int root = node;
while (dad[root] != root)
root = dad[root];
int x = node, y;
while (dad[x] != x) {
y = dad[x];
dad[x] = root;
x = y;
}
}
void unite(int x, int y)
{
if (rang[dad[x]] < rang[dad[y]])
dad[dad[x]] = dad[y];
else
dad[dad[y]] = dad[x];
if (rang[dad[x]] == rang[dad[y]])
rang[dad[y]]++;
}
void check(int x, int y)
{
find(x);
find(y);
if (dad[x] == dad[y])
g << "DA\n";
else
g << "NU\n";
}
void solve()
{
f >> n >> m;
init();
int c, x, y;
for (int i = 1; i <= m; ++i) {
f >> c >> x >> y;
if (c == 1)
unite(x, y);
else
check(x, y);
}
}
int main()
{
solve();
return 0;
}