Cod sursa(job #1360903)

Utilizator BologaDragosBologa Dragos BologaDragos Data 25 februarie 2015 18:40:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

#define NMAX 100002

using namespace std;

ifstream f("disjoint.in") ;
ofstream g("disjoint.out") ;

int TT[NMAX] , Rang[NMAX] ;

int m,n ;

int Radacina (int x)
{
    int R=x,y ;
    while(R!=TT[R])
        R=TT[R] ;
    while(x!=TT[x])
    {
       y=TT[x] ;
       TT[x]=R ;
       x=y ;
    }
    return R ;
}

int unite(int x,int y)
{
    if(Rang[x]>Rang[y])
        TT[y]=x ;
    else
        TT[x]=y ;
    if(Rang[x]==Rang[y])
        Rang[y]++ ;
}

int main()
{
    int cod,a,b,x ;

    f>>n>>m ;
    for(int i=1;i<=n;i++)
    {
        TT[i]=i ;
        Rang[i]=1 ;
    }

    for(int i=1;i<=m;i++)
    {
        f>>cod>>a>>b ;
        if(cod==2)
        {
            if(Radacina(a)==Radacina(b))
                g<<"DA\n" ;
            else
                g<<"NU\n" ;
        }
        else
            unite(Radacina(a),Radacina(b)) ;
    }

    return 0;
}