Pagini recente » Cod sursa (job #302173) | Cod sursa (job #2177035) | Cod sursa (job #2783736) | Cod sursa (job #646723) | Cod sursa (job #2639985)
#include <bits/stdc++.h>
#define MAX 1000005
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n, m, caz, x, y, rang[MAX], t[MAX];
int radacina(int x){
if(!t[x])
return x;
return t[x] = radacina(t[x]);
}
void unire(int p, int k){
int rp = radacina(p), rk = radacina(k);
if(rp != rk){
if(rang[rk] > rang[rp])
t[rp] = rk, rang[rk]++;
else{
t[rk] = rp;
if(rang[rp] == rang[rk])
rang[rp]++;
}
}
}
int main(){
in>>n>>m;
for(int i = 1; i <= m; i++){
in>>caz>>x>>y;
if(caz == 1)
unire(x, y);
else
out<<(radacina(x) == radacina(y) ? "DA" : "NU")<<"\n";
}
}