Pagini recente » Cod sursa (job #1432670) | Cod sursa (job #2334762) | Cod sursa (job #178678) | Cod sursa (job #2342816) | Cod sursa (job #2938454)
#include <iostream>
#include <fstream>
#include <vector>
std::vector<int> parint(100001);
std::vector<int> grad(100001, 0);
int fetch(const int &val)
{
if (parint[val] == val)
{
return val;
}
return fetch(parint[val]);
}
void reune(const int &casa, const int &masa)
{
int a = fetch(casa);
int b = fetch(masa);
if (grad[a] > grad[b])
{
grad[a]++;
parint[b] = a;
}
else
{
grad[b]++;
parint[a] = b;
}
}
int main()
{
std::ifstream cin("disjoint.in");
std::ofstream cout("disjoint.out");
int n, m;
cin >> n >> m;
int q, first, sec;
for (size_t i = 1; i <= n; i++)
{
parint[i] = i;
}
for (size_t i = 0; i < m; i++)
{
cin >> q >> first >> sec;
if (q == 1)
{
reune(first, sec);
}
else
{
if (fetch(first) == fetch(sec))
cout << "DA\n";
else
cout << "NU\n";
}
}
}