Pagini recente » Cod sursa (job #40074) | Cod sursa (job #1728042) | Cod sursa (job #16500) | Cod sursa (job #640176) | Cod sursa (job #2912424)
#include <bits/stdc++.h>
using namespace std;
int const N = 100001;
int sef[N];
int sefsuprem(int n) // calculeaza radacina subarborelui unde se afla n
{
if(sef[n] == n)
return n;
sef[n] = sefsuprem(sef[n]);
return sef[n];
}
void uneste(int a, int b) // reuneste multimea elementului a cu cea a elementului b
{
int sefa = sefsuprem(a);
int sefb = sefsuprem(b);
sef[sefb] = sefa;
}
int main()
{
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, q;
cin >> n >> q;
for(int i = 1; i <= n; i++)
{
sef[i] = i;
}
for(int i = 1; i <= q; i++)
{
int c, x, y;
cin >> c >> x >> y;
if(c == 1)
{
uneste(x, y);
}
else
{
if(sefsuprem(x) == sefsuprem(y))
cout << "DA\n";
else
cout << "NU\n";
}
}
return 0;
}