Cod sursa(job #2341709)

Utilizator miha5092mihai mitrea miha5092 Data 12 februarie 2019 09:59:59
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>

using namespace std;

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

int n, m ;

int daddy[100005], h[100005] ;

int radacina(int i)
{
    while( daddy[i] != i )
        {
            h[daddy[i]]++ ;
            i = daddy[i] ;
        }
    return i ;
}

void conect(int x, int y)
{
    int hardx , hardy ;
    hardx = radacina(x) ;
    hardy = radacina(y) ;
    if( h[hardx] >= h[hardy] )
    {
        if( h[hardx] == h[hardy] )
            h[hardx] ++ ;
        daddy[hardy] = hardx ;
    }
}

bool ver(int x,int y)
{
    if( radacina(x) == radacina(y) )
        return true ;
    else
        return false ;
}

int main()
{
    in >> n >> m ;
    for(int i = 1 ; i<=n ; i++)
    {
        daddy[i] = i ;
        h[i] = 1 ;
    }
    for(int i = 1 ; i<=m ; i++)
    {
        int cod , x , y ;
        in >> cod ;
        in >> x >> y ;
        if( cod == 1 )
        {
            conect(x,y) ;
        }
        else
        {
            if( ver(x,y) == 1 )
                out << "DA" << "\n" ;
            else
                out << "NU" << "\n" ;
        }
    }
    return 0;
}