Pagini recente » Cod sursa (job #2981891) | Autentificare | Istoria paginii runda/concurs_nou-andrei/clasament | Istoria paginii runda/zxzx | Cod sursa (job #2452598)
#include <cstdio>
using namespace std;
int n,m;
int grad[100020], tata[100020];
int find_father(int node){
if(tata[node] == node){
return node;
}
int ans = find_father(tata[node]);
tata[node] = ans;
return ans;
}
void unite(int node1, int node2){
if(grad[node1] < grad[node2]){
tata[node1] = node2;
grad[node2] += grad[node1];
}
else{
tata[node2] = node1;
grad[node1] += grad[node2];
}
}
int main(){
FILE *f = fopen("disjoint.in","r");
FILE *g = fopen("disjoint.out","w");
fscanf(f,"%d %d",&n,&m);
int o, aux1, aux2;
for(int i=1;i<=n;i++){
tata[i] = i;
grad[i] = 1;
}
for(int i=0;i<m;i++){
fscanf(f,"%d %d %d",&o, &aux1, &aux2);
if(o == 2){
if(find_father(aux1) == find_father(aux2)){
fprintf(g,"DA\n");
}
else{
fprintf(g,"NU\n");
}
}
else{
if(find_father(aux1) == find_father(aux2)){
return 0;
}
unite(find_father(aux1), find_father(aux2));
}
}
return 0;
}