Cod sursa(job #1268449)

Utilizator gerd13David Gergely gerd13 Data 20 noiembrie 2014 22:46:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std ;

const int NMAX = 100005 ;
const int INF = 0x3f3f3f3f ;

ifstream fin("disjoint.in") ;
ofstream fout("disjoint.out") ;

int N, M ;
int A[NMAX], rang[NMAX] ;


 int FIND(int nod)
{
if(A[nod] != nod)
    FIND(A[nod]) ;
else return  A[nod] ;

}

static inline void U(int x, int y)
{

    if(rang[x] > rang[y])
        A[y] = x ;
    else A[x] = y ;

    if(rang[x] == rang[y]) rang[y] ++ ;
}

int main()
{
    fin >> N >> M ;

    for(int i = 1 ; i <= N ; ++ i )
    {
        A[i] = i ;
        rang[i] = 1 ;

    }

    for(int i = 1 ; i <= M ; ++ i)
    {
        int tip, x, y;

        fin >> tip >> x >> y ;

        switch (tip)
        {
                case 1:
                U(FIND(x), FIND(y)) ;
                break ;

                case 2:
                if(FIND(x) == FIND(y))
                    fout << "DA" << '\n' ;
                else fout << "NU" << '\n' ;
                break ;

        }



    }

    fin.close() ;
    fout.close() ;
    return  0 ;
}