Cod sursa(job #670604)

Utilizator giuliastefGiulia Stef giuliastef Data 29 ianuarie 2012 16:11:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
#define NMAX 100011
using namespace std;
int t[NMAX],r[NMAX];
int find(int nod){
     int rad,x;
     for(rad=nod; t[rad]!=rad; rad=t[rad]);
     /*for(;t[nod]!=nod;){
      x=t[nod];
      t[nod]=rad;
      nod=x;
     }*/
     return rad;
}
void unite(int x, int y){
     if(r[x]>r[y])
      t[y]=x;
     else
      t[x]=y;
     if(r[x]==r[y]) r[y]++;
}
int main(){
    int n,m,i,op,x,y;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>m;
    for(i=1;i<=n;++i){
     t[i]=i;
     r[i]=1;
    }
    for(i=1;i<=m;++i){
     f>>op>>x>>y;
     if(op==2){
      if(find(x)==find(y)) g<<"DA\n"; 
      else g<<"NU\n";
     }
     else
      unite(find(x),find(y)); 
    }
    return 0;
}