Pagini recente » Cod sursa (job #1644827) | Cod sursa (job #1724368) | Cod sursa (job #2824931) | Cod sursa (job #1666102) | Cod sursa (job #2976846)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100004;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
struct DisjointSetUnion
{
int p[NMAX];
int size[NMAX];
void init()
{
for (int i = 1; i <= n; i++)
{
p[i] = i;
size[i] = 1;
}
}
int find(int v)
{
if (v == p[v])
{
return v;
}
return p[v] = find(p[v]);
}
void unite(int v, int u)
{
int repr_v = find(v);
int repr_u = find(u);
if (repr_v != repr_u)
{
if (size[repr_v] < size[repr_u])
{
swap(repr_v, repr_u);
}
p[repr_u] = repr_v;
size[repr_v] += size[repr_u];
}
}
} DSU;
int main()
{
fin >> n >> m;
DSU.init();
for (int i = 1; i <= m; i++)
{
int tip, a, b;
fin >> tip >> a >> b;
if (tip == 1)
{
DSU.unite(a, b);
}
else
{
fout << (DSU.find(a) == DSU.find(b) ? "DA\n" : "NU\n");
}
}
return 0;
}