Pagini recente » Cod sursa (job #747969) | Monitorul de evaluare | Cod sursa (job #1694484) | Cod sursa (job #2221737) | Cod sursa (job #2457089)
//ALEXANDRU MICLEA
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
using namespace std;
#include <fstream>
ifstream cin("disjoint.in"); ofstream cout("disjoint.out");
int tata[100005];
int nrelem[100005];
int c, m, n, x, y;
int strabunic(int nod) {
if (nod != tata[nod]) {
tata[nod] = strabunic(tata[nod]);
}
return tata[nod];
}
void merge(int a, int b) {
if (nrelem[tata[a]] > nrelem[tata[b]]) {
int cop = nrelem[tata[b]];
tata[a] = tata[b];
nrelem[tata[a]] += cop;
}
else {
int cop = nrelem[tata[a]];
tata[b] = tata[a];
nrelem[tata[b]] += cop;
}
}
int main() {
cin >> m >> n;
for (int i = 1; i <= m; i++) {
tata[i] = i;
nrelem[i] = i;
}
for (int i = 1; i <= n; i++) {
cin >> c >> x >> y;
if (c == 1) {
merge(strabunic(x), strabunic(y));
}
if (c == 2) {
if (strabunic(x) == strabunic(y)) {
cout << "DA\n";
}
else {
cout << "NU\n";
}
}
}
}