Cod sursa(job #1998984)

Utilizator MihaelaCismaruMihaela Cismaru MihaelaCismaru Data 9 iulie 2017 20:48:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include<fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int arb[100001], root1,root2,answ,i,k,n,type,elem1,elem2;
void find_root( int x ){
    if( arb[x] < 0 ){
        answ = x;
    }
    else{
        find_root( arb[x] );
    }
    return;
}
int main(){
    in >> n >> k;
    for( i = 1; i <= n; i ++ ){
        arb[i] = -1;
    }
    for( i = 1; i <= k; i ++ ){
        in >> type >> elem1 >> elem2;
        if( type == 2 ){
            find_root( elem1 );
            root1 = answ;
            find_root( elem2 );
            root2 = answ;
            if( root1 == root2 ){
                out<<"DA"<<"\n";
            }
            else{
                out<<"NU"<<"\n";
            }
        }
        if( type == 1 ){
            find_root( elem1 );
            root1 = answ;
            find_root( elem2 );
            root2 = answ;
            if( arb[root1] <= arb[root2] ){
                arb[root1] += arb[root2];
                arb[root2] = root1;
            }
            else{
                arb[root2] += arb[root1];
                arb[root1] = root2;
            }
        }
    }
    return 0;
}