Cod sursa(job #1215558)

Utilizator andreey_047Andrei Maxim andreey_047 Data 1 august 2014 13:27:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <cstdio>
#define Nmax 100009

using namespace std;
int n,m,t[Nmax];
int Find(int x){
 int rad,y;
  for(rad=x;t[rad]!=rad;rad=t[rad]);
  while(t[x]!=rad){
    y = t[x];
    t[x] = rad;
    x=y;
  }
  return rad;
}
void Unire(int x , int y){
 t[Find(x)] = t[Find(y)];
}
int main(){
    int i,c,x,y;
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++) t[i]=i;
    for(i=1;i<=m;i++){
        scanf("%d%d%d",&c,&x,&y);
        if(c == 2){
            if(Find(x) == Find(y)) printf("DA\n");
             else printf("NU\n");}
        else Unire(Find(x),Find(y));
    }
    return 0;
}