Pagini recente » Cod sursa (job #179195) | Cod sursa (job #563189) | Cod sursa (job #218207) | Cod sursa (job #134916) | Cod sursa (job #2833922)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
int n, m;
int parent[100001];
int rang[100001];
int Find(int x)
{
if (x != parent[x])
{
parent[x] = Find(parent[x]);
}
return parent[x];
}
void Union(int x, int y)
{
int rootX = Find(x);
int rootY = Find(y);
if (rootX != rootY)
{
if (rang[rootX] > rang[rootY])
{
parent[rootY] = rootX;
}
else
{
parent[rootX] = rootY;
if (rang[rootX] == rang[rootY])
{
rang[rootY]++;
}
}
}
}
int main()
{
f >> m >> n;
for (int i = 1; i <= m; i++)
{
parent[i] = i;
}
for (int i = 1; i <= n; i++)
{
int option, x, y;
f >> option;
switch (option)
{
case 1:
f >> x >> y;
Union(x, y);
break;
case 2:
f >> x >> y;
if (Find(x) == Find(y))
{
g << "DA\n";
}
else
{
g << "NU\n";
}
break;
}
}
// for (int i = 1; i <= m; i++)
// {
// cout << parent[i] << " ";
// }
}