Pagini recente » Cod sursa (job #117055) | Cod sursa (job #3173397) | Cod sursa (job #2105416) | Cod sursa (job #1389919) | Cod sursa (job #2912378)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int v[100000],p[100000];
void reassign(int node,int root){
int res;
while(node != p[node]){
res = p[node];
p[node] = root;
node = res;
}
}
int root(int a){
while(a != p[a])a = p[a];
return a;
}
void mrg(int a,int b){
int cb = b;
int ca = a;
a = root(a);
b = root(b);
if(v[a] < v[b]){
swap(a,b);
}
p[b] = a;
v[a] = v[a] + v[b];
v[b] = -1;
///a is parent
reassign(ca,a);
reassign(cb,a);
}
bool query(int a,int b){
int cb = b;
int ca = a;
a = root(a);
b = root(b);
reassign(ca,a);
reassign(cb,b);
return a == b;
}
int main()
{
int n,m,i,cer,a,b;
fin>>n>>m;
for(i = 0;i < n;i++){
p[i] = i;
v[i] = 1;
}
for(i = 0;i < m;i++){
fin>>cer>>a>>b;
a--;
b--;
if(cer == 1){
mrg(a,b);
}else if(query(a,b))fout<<"DA\n";
else fout<<"NU\n";
}
return 0;
}