Cod sursa(job #1145240)

Utilizator buzu.tudor67Tudor Buzu buzu.tudor67 Data 17 martie 2014 23:48:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#define maxn 100005
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");

int tata[maxn],rang[maxn];
int i,n,t,oper,x,y;

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

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

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