Pagini recente » Cod sursa (job #1125153) | Cod sursa (job #1660690) | Cod sursa (job #3137639) | Cod sursa (job #1025896) | Cod sursa (job #2946974)
#include <fstream>
#include <vector>
using namespace std;
const int N = 1e5 + 1;
int t[N], rang[N];
int Find(int x)
{
if (t[x] == 0)
return x;
int y = Find(t[x]);
t[x] = y;
return y;
}
void Union(int x, int y)
{
if (rang[x] > rang[y])
swap(x, y);
t[x] = y;
if (rang[x] == rang[y]) rang[y]++;
}
int main()
{
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m;
fin >> n >> m;
while (m--)
{
int op, x, y;
fin >> op >> x >> y;
x = Find(x);
y = Find(y);
if (op == 1)
{
if (x != y)
Union(x, y);
}
else fout << ((x == y) ? "DA\n" : "NU\n");
}
fin.close();
fout.close();
}