Cod sursa(job #2050706)

Utilizator herbertoHerbert Mohanu herberto Data 28 octombrie 2017 11:06:05
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>
using namespace std;
#define MAXN 100001
int dad[MAXN];

int find_daddy(int x){
  if(x==dad[x])
    return x;
  return dad[x]=find_daddy(dad[x]);
}
inline void join(int x, int y){
  int rx, ry;
  rx=find_daddy(x);
  ry=find_daddy(y);
  dad[ry]=rx;
}
int main(){
  FILE*fin=fopen("disjoint.in", "r");
  FILE*fout=fopen("disjoint.out", "w");
  int n, i, tip, x, y, m, a, b;
  fscanf(fin, "%d%d", &n, &m);
  for(i=1; i<=n; i++)
    dad[i]=i;
  for(i=1; i<=m; i++){
    fscanf(fin, "%d%d%d", &tip, &x, &y);
    if(tip==1)
      join(x, y);
    else{
      a=find_daddy(x);
      b=find_daddy(y);
      if(a==b)
        fprintf(fout, "DA\n");
      else
        fprintf(fout, "NU\n");
    }
  }
  return 0;
}