Cod sursa(job #1790223)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 27 octombrie 2016 21:44:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include <stdio.h>
#define MAXN 100000

int sef[MAXN+1];

int find(int x){
  if(sef[x]==x)
    return x;
  return sef[x]=find(sef[x]);
}

int main()
{
  int n, m, i, x, y, c;
  FILE *fi=fopen("disjoint.in", "r"), *fo=fopen("disjoint.out", "w");
  fscanf(fi, "%d%d", &n, &m);
  for(i=1;i<=n;i++)
    sef[i]=i;
  for(i=0;i<m;i++){
    fscanf(fi, "%d%d%d", &c, &x, &y);
    if(c==1)
      sef[find(x)]=sef[find(y)];
    else if(find(x)==find(y))
      fprintf(fo, "DA\n");
    else
      fprintf(fo, "NU\n");
  }
  fclose(fi);
  fclose(fo);
  return 0;
}