Pagini recente » Cod sursa (job #3316243) | Cod sursa (job #1965367) | Monitorul de evaluare | Cod sursa (job #462403) | Cod sursa (job #3318907)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m;
vector<int> tt;
vector<int> r;
vector<int> s;
int Find(int x){
if (tt[x] == 0)
return x;
tt[x] = Find(tt[x]);
return tt[x];
}
void Union_by_R(int x, int y){
int tt_x = Find(x);
int tt_y = Find(y);
if (r[tt_x] > r[tt_y]){
tt[tt_y] = tt_x;
}
else {
tt[tt_x] = tt_y;
if(r[tt_x] == r[tt_y])
r[tt_y]+=1;
}
}
void Union_by_S(int x, int y){
int tt_x = Find(x);
int tt_y = Find(y);
if (s[tt_x] > s[tt_y]){
tt[tt_y] = tt_x;
s[tt_x]+=s[tt_y];
}
else {
tt[tt_x] = tt_y;
s[tt_y]+=s[tt_x];
}
}
int main(){
cin>>n>>m;
tt.assign(n+1, 0);
r.assign(n+1, 0);
s.assign(n+1, 1);
for (int i=0; i<m; i++){
int o, e1, e2;
cin>>o>>e1>>e2;
if (o == 1){
Union_by_S(e1, e2);
}
else {
int tt_e1 = Find(e1);
int tt_e2 = Find(e2);
if (tt_e1 == tt_e2){
cout<<"DA\n";
}
else{
cout<<"NU\n";
}
}
}
return 0;
}