Pagini recente » Cod sursa (job #1248512) | Cod sursa (job #99187) | Cod sursa (job #1766210) | Cod sursa (job #4424) | Cod sursa (job #531328)
Cod sursa(job #531328)
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 100001;
vector<pair<int, int> > sets;
int N;
void initSets() {
sets.push_back(make_pair(0, 0));
for(int i = 1; i <= N; i++) {
pair <int, int> p;
p.first = 0;
p.second = 1;
sets.push_back(p);
}
}
void merge(int a, int b) {
if (sets[a].second > sets[b].second) {
sets[b].first = a;
sets[a].second += sets[b].second;
}
else {
sets[a].first = b;
sets[b].second += sets[a].second;
}
}
int getFather (int x) {
while (sets[x].first != 0) {
x = sets[x].first;
}
return x;
}
void updateFather(int x, int father) {
while (sets[x].first != 0) {
sets[x].first = father;
x = sets[x].first;
}
}
void check(int a, int b) {
int fa, fb;
fa = getFather(a);
//updateFather(a, fa);
fb = getFather(b);
//updateFather(b, fb);
if (fa == fb) printf("DA\n");
else printf("NU\n");
}
int main() {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int M;
scanf("%d %d", &N, &M);
initSets();
int op, a, b;
for (int i = 0; i < M; i++) {
scanf("%d %d %d", &op, &a, &b);
if (op == 1) merge(a, b);
else check(a, b);
}
return 0;
}