Cod sursa(job #657040)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 5 ianuarie 2012 17:55:14
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <stdio.h>
using namespace std;
int n,m,up[1000001],x,a,b,r1,r2;

int radacina(int x){
  int aux;
  int r=x;
  while(up[r]!=r)
    r=up[r];
  while (up[x]!=x){
    aux=up[x];
    up[x]=r;
    x=up[x];
  }
  return r;
}

int main()
{
  freopen ("disjoint.in","r",stdin);
  freopen ("disjoint.out","w",stdout);
  scanf("%d %d",&n,&m);
  for (int i=1;i<=n;i++)
    up[i]=i;
  for (int i=1;i<=m;i++){
    scanf("%d %d %d",&x,&a,&b);
    r1=radacina(a);
    r2=radacina(b);
    if (r1==r2) printf("DA\n");
    else if (x==2) printf("NU\n");
         else up[r2]=r1;
  }
  return 0;
}