Pagini recente » Cod sursa (job #111753) | Clasament cerculetz_03 | Cod sursa (job #1620766) | Cod sursa (job #2564981) | Cod sursa (job #3141314)
#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 x)
{
if (boss[x] == x)
return x;
else
return boss[x] = finalBoss(boss[x]);
}
void unite(int x, int y)
{
int bx = finalBoss(x), by = finalBoss(y);
if (cnt[bx] < cnt[by])
{
boss[bx] = by;
cnt[by] = cnt[by] + cnt[bx];
}
else
{
boss[by] = bx;
cnt[bx] = cnt[bx] + cnt[by];
}
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
boss[i] = i;
cnt[i] = 1;
}
for (int i = 1; i <= m; i++)
{
int type, x, y;
cin >> type >> x >> y;
if (type == 1)
unite(x, y);
else
if (finalBoss(x) == finalBoss(y))
cout << "DA\n";
else
cout << "NU\n";
}
return 0;
}