Cod sursa(job #1199767)

Utilizator azkabancont-vechi azkaban Data 20 iunie 2014 16:01:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

void uneste(long x, long y,long RG[],long Rad[]) 
{
 if (RG[x]>RG[y]) Rad[y]=x;
             else Rad[x]=y;
 if (RG[x]==RG[y]) ++RG[x];   
}

long cauta_rad(long x,long Rad[])
{
    long nod, aux;
    for (nod = x; Rad[nod] != nod; nod = Rad[nod]);
            while (Rad[x]!= x){
                               aux = Rad[x];
                               Rad[x] = nod;
                               x = aux;
                              }
   return nod;
}

long m,n,i,j,x,y,cod;
long Rad[100013],RG[100013];
int main(){
           cin>>m>>n;
           for (i=1;i<=n;++i) {
                               Rad[i]=i;
                               RG[i]=1;
                               }
           for (i=1;i<=n;++i){
                              cin>>cod>>x>>y;
                              if (cod==1) uneste(cauta_rad(x,Rad),cauta_rad(y,Rad),RG,Rad);
                              if (cod==2) 
                                     if (cauta_rad(x,Rad) == cauta_rad(y,Rad)) cout<<"DA\n";
                                                                          else cout<<"NU\n";
                             }
return 0;
}