Cod sursa(job #1360852)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 25 februarie 2015 18:23:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");

const int MAX_N = 100005;

int tata[MAX_N],rang[MAX_N];
int i,n,m,oper,x,y;

int radacina(int x){
    int aux,nod=x;
    while(x!=tata[x]) x=tata[x];
    while(nod!=x){ aux=tata[nod]; tata[nod]=x; nod=aux; }
    return x;
}

void uneste(int x, int y){
     if(rang[x]<rang[y]) tata[x]=y;
     else tata[y]=x;
     if(rang[x]==rang[y]) ++rang[x];
}

int main(){
    fi>>n>>m;
    
    for(i=1;i<=n;i++){
                      tata[i]=i;
                      rang[i]=0;
                     }
    
    for(i=1;i<=m;i++){
                      fi>>oper>>x>>y;
                      if(oper==1) uneste(radacina(x),radacina(y));
                      else{
                           if(radacina(x)==radacina(y)) fo<<"DA\n";
                           else fo<<"NU\n";
                          } 
                     }
    
    fi.close();
    fo.close();
    return 0;
}