Pagini recente » Cod sursa (job #2886132) | Cod sursa (job #1516163) | Cod sursa (job #1404117) | Cod sursa (job #1814553) | Cod sursa (job #3238945)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
vector <int> card, rad, a;
void init()
{
for (int i = 1; i <= n; ++i) {
rad[i] = i;
card[i] = 1;
}
}
int find(int x)
{
if (rad[x] != x) {
rad[x] = find(rad[x]);
}
return rad[x];
}
void Union(int a, int b)
{
if (card[a] < card[b]) {
swap(a, b);
}
rad[b] = a;
card[a] += card[b];
}
int main()
{
f >> n >> m;
a.resize(n + 5), card.resize(n + 5), rad.resize(n + 5);
init();
while(m--) {
int p, a, b;
f >> p >> a >> b;
if (p == 1 && find(a) != find(b)) {
Union(find(a), find(b));
}
else {
if (find(a) == find(b)) {
g << "DA\n";
}
else {
g << "NU\n";
}
}
}
return 0;
}