Pagini recente » Cod sursa (job #302063) | Cod sursa (job #912995) | Cod sursa (job #1588726) | Cod sursa (job #2304755) | Cod sursa (job #2384268)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int N_MAX = 1e5 + 5;
int n, m;
int t[N_MAX], d[N_MAX];
int find(int x)
{
int r, y;
for (r = x; t[r] != r; r = t[r]);
for (;t[x]!=x;)
{
y = t[x];
t[x] = r;
x = y;
}
return r;
}
void unite(int x, int y)
{
if (d[x] > d[y])
t[y] = x;
else
t[x] = y;
if (d[x] == d[y])
d[x] ++;
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i ++)
t[i] = i, d[i] = 1;
int c, x, y;
for (int i = 0; i < m; i ++)
{
fin >> c >> x >> y;
if (c == 1)
{
unite(find(x), find(y));
}
else
{
fout << (find(x) == find(y) ? "DA\n" : "NU\n");
}
}
}