Pagini recente » Cod sursa (job #3280814) | Cod sursa (job #173270) | Cod sursa (job #237845) | Cod sursa (job #836987) | Cod sursa (job #1200431)
#include <iostream>
#include <cstdio>
#define lim 100020
using namespace std;
class UF{
int sz[lim];
int id[lim];
public:
UF(int N){
for(int i =0 ; i < N; i++){
sz[i] = 0;
id[i] = i;
}
}
int root(int i){
while(i != id[i]){
id[i] = id[id[i]];
i = id[i];
}
return i;
}
bool isConnected(int i,int j){
return root(i) == root(j);
}
void unify(int i,int j){
int p = root(i);
int q = root(j);
if(sz[p] < sz[q]){ id[p] = q; sz[q] += sz[p]; }
else { id[q] = p; sz[p] += sz[q]; }
}
};
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,m;
scanf("%d %d",&n,&m);
UF x (n);
for(int i = 0 ;i < m ; i ++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a == 1){ x.unify(b,c); }
else { (x.isConnected(b,c)) ? printf("DA\n"):printf("NU\n"); }
}
return 0;
}