Pagini recente » Cod sursa (job #2260069) | Cod sursa (job #1282048) | Cod sursa (job #464766) | Istoria paginii utilizator/salutare | Cod sursa (job #2701540)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100005;
int parent[NMAX];
int rang[NMAX];
int n, m, i, x, y, operatie;
int find_root (int x) {
int r;
for (r = x; parent[r] != r; r = parent[r]);
while (x != parent[x]) {
int y = parent[x];
parent[x] = r;
x = y;
}
return r;
}
int unire (int x, int y) {
if (rang[x] > rang[y])
parent[y] = x;
else
parent[x] = y;
if (rang[x] == rang[y])
rang[y]++;
}
int main () {
fin >> n >> m;
for (i = 1; i <= n; i++) {
parent[i] = i;
rang[i] = 1;
}
for (i = 0; i < m; i++) {
fin >> operatie >> x >> y;
if (operatie == 1) {
unire(find_root(x), find_root(y));
}
else {
if (find_root(x) == find_root(y))
fout << "DA" << endl;
else
fout << "NU" << endl;
}
}
}