Pagini recente » Borderou de evaluare (job #1484188) | Cod sursa (job #2455789)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
#define NMAX 100003
int cod [NMAX], lg [NMAX];
int n, m;
int FindRoot (int A){
int B;
for (B = A; cod [B] != B; B = cod [B]);
while (cod[A] != A){
int cpy = cod [A];
cod [A] = B;
A = cpy;
}
return B;
}
void Reu (int x, int y){
if (lg [x] > lg [y]){
cod [y] = x;
lg [x] += lg [y];
lg [y] = lg [x];
}
else{
cod [x] = y;
lg [y] += lg [x];
lg [x] = lg [y];
}
}
int main (){
fin >> n >> m;
for (int B = 1; B <= n; B ++){
cod [B] = B;
lg [B] = 1;
}
for (int B = 1; B <= m; B ++){
int cod, x, y;
fin >> cod >> x >> y;
if (cod == 1)
Reu (FindRoot (x), FindRoot (y));
else{
if (FindRoot (x) == FindRoot (y))fout << "DA" << '\n';
else fout << "NU" << '\n';
}
}
return 0;
}