Pagini recente » Cod sursa (job #2818015) | Cod sursa (job #1535904) | Cod sursa (job #1398398) | Cod sursa (job #502354) | Cod sursa (job #3214092)
#include <fstream>
#define MAX 100000
using namespace std;
ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");
int boss[MAX + 10], cnt[MAX + 10];
int finalBoss(int node)
{
if (node == boss[node])
return node;
else
return boss[node] = finalBoss(boss[node]);
}
void join(int node1, int node2)
{
node1 = finalBoss(node1);
node2 = finalBoss(node2);
if (cnt[node1] > cnt[node2])
{
boss[node2] = node1;
cnt[node1] = cnt[node1] + cnt[node2];
}
else
{
boss[node1] = node2;
cnt[node2] = cnt[node2] + cnt[node1];
}
}
int main()
{
int n, q;
cin >> n >> q;
for (int i = 1; i <= n; i++)
{
boss[i] = i;
cnt[i] = 1;
}
for (int i = 1; i <= q; i++)
{
int type, x, y;
cin >> type >> x >> y;
if (type == 1)
join(x, y);
else
if (finalBoss(x) == finalBoss(y))
cout << "DA\n";
else
cout << "NU\n";
}
return 0;
}