Cod sursa(job #1791938)

Utilizator matzul98Socaciu Mihai matzul98 Data 29 octombrie 2016 21:06:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 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;
}