Cod sursa(job #633965)

Utilizator blk.irineluIrina Ursateanu blk.irinelu Data 15 noiembrie 2011 10:54:23
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <iostream>
#define max 100005

using namespace std;

int n,m,tata[max],niv[max],rx,ry;

int radacina(int x)
{
    int aux,c=0,rad;
    aux=x;
    while(aux!=tata[aux])
    {
          aux=tata[aux];
          c++;
     }
     rad=aux;
     aux=x;
     while(aux!=tata[aux])
     {
         niv[aux]=c;
         tata[aux]=rad;
         aux=tata[aux];
     }
     return rad;
}                                

void unire(int x,int y)
{
     if(niv[x]>=niv[y])
       tata[ry]=rx;
     else
       tata[rx]=ry;
}  
     
int main(int argc, char *argv[])
{
    int x,y,cod;
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>m;
 
    for(int i=1;i<=n;i++)
      tata[i]=i;   
    
    for(int i=1;i<=m;i++)
    {
            f>>cod>>x>>y; 
            rx=radacina(x);
            ry=radacina(y);
            
            if(cod==1) unire(x,y);
            else if(rx==ry) g<<"DA"<<endl;
                   else g<<"NU"<<endl;
    }               
    system("PAUSE");
    return EXIT_SUCCESS;
}