Pagini recente » Cod sursa (job #819435) | Cod sursa (job #1955660) | Cod sursa (job #1865983) | Cod sursa (job #2064118) | Cod sursa (job #3238950)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
vector <int> a, rad, card;
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)
{
int x = find(a), y = find(b);
if(x != y) {
if (card[x] < card[y]) {
swap(x, y);
}
card[x] += card[y];
rad[b] = a;
}
}
int main()
{
f >> n >> m;
a.resize(n + 5), card.resize(n + 5), rad.resize(n + 5);
init();
while(m--) {
int p, x, y;
f >> p >> x >> y;
if (p == 1) {
Union(find(x), find(y));
}
else {
if (find(x) == find(y)) {
g << "DA\n";
}
else {
g << "NU\n";
}
}
}
return 0;
}