Cod sursa(job #2047331)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 24 octombrie 2017 19:01:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <stdio.h>
#define N 100001
#include <fstream>
using namespace std;

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

int T[N],rang[N],n;

int rada(int nod)
{
    int R=nod, next;

    while(T[R]!=R)R=T[R];
    //in R am rada
    while( T[nod]!=nod)
    {

        next=T[nod];
        T[nod]=R;
        nod=next;



    }

    return R;

}

void unite(int x , int y)
{
    T[y]=x;
    rang[x]+=y;

}



int main()
{ int op;
    in >> n >> op;

    for ( int i = 1 ; i<= n ; ++i)
    {
        rang[i]=1;
        T[i]=i;
    }

    for ( int i = 1 ; i<= op ; ++i)
    {
        int x,a,b;

        in >> x>>a>>b;

        if(x==1)
        {

            if(rada(a)!=rada(b))unite(rada(a),rada(b));

        }
        else if ( x == 2 )
        {

            if(rada(a)==rada(b)) out << "DA\n";
            else out <<"NU\n";

        }





    }



    return 0;
}