Pagini recente » Cod sursa (job #1365711) | Cod sursa (job #2329511) | Cod sursa (job #3166920) | Cod sursa (job #2318633) | Cod sursa (job #2330773)
/**
Paduri de multimi disjuncte
infoarena: https://infoarena.ro/problema/disjoint
**/
#include <fstream>
const int Dim = 100001;
int n, m;
int code, x, y;
int t[Dim];
int h[Dim];
void Solve();
void Union(int r1, int r2);
int Find(int x);
int main()
{
Solve();
return 0;
}
void Solve()
{
std::ifstream fin("disjoint.in");
std::ofstream fout("disjoint.out");
fin >> n >> m;
for(int i = 1; i <= n; ++i)
t[i] = i;
for(int i = 1; i <= m; ++i)
{
fin >> code >> x >> y;
if (code == 1)
Union(x, y);
else if (code == 2)
{
if (Find(x) == Find(y)) fout << "DA\n";
else fout << "NU\n";
}
}
fin.close();
fout.close();
}
void Union(int r1, int r2)
{
if (h[r1] > h[r2])
t[r2] = r1;
else
{
t[r1] = r2;
if (h[r1] == h[r2])
h[r2]++;
}
}
int Find(int x)
{
if (x == t[x])
return x;
return t[x] = Find(t[x]);
}