Pagini recente » Cod sursa (job #864047) | Cod sursa (job #2040265) | Cod sursa (job #1472753) | Cod sursa (job #880853) | Cod sursa (job #689991)
Cod sursa(job #689991)
#include <cstdio>
using namespace std;
#define NMAX 100005
int P[NMAX], rank[NMAX], N, M;
void make_set(int N){
for(int i = 1; i <= N; ++i)
P[i] = i, rank[i] = 1;
}
int find_set(int x){
if(x != P[x])
P[x] = find_set(P[x]);
return P[x];
}
void link(int x, int y){
if(rank[x] > rank[y]){
P[y] = x;
}
else{
P[x] = y;
if(rank[x] == rank[y])
++rank[y];
}
}
void make_union(int x, int y){
link(find_set(x), find_set(y));
}
int main(){
FILE * f = fopen("disjoint.in", "rt");
FILE * g = fopen("disjoint.out", "wt");
fscanf(f, "%d %d", &N, &M);
make_set(N);
for(int i = 0; i < M; ++i){
int code, x, y;
fscanf(f, "%d %d %d", &code, &x, &y);
if(code == 1)
make_union(x, y);
else if(code == 2){
if(find_set(x) == find_set(y))
fprintf(g, "DA\n");
else
fprintf(g, "NU\n");
}
}
fclose(f);
fclose(g);
return 0;
}