Cod sursa(job #2046991)

Utilizator eduardandrei20Nechifor Eduard Andrei eduardandrei20 Data 24 octombrie 2017 13:37:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 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],n;
 int rang[N];

int rada(int nod)
{

    int R=nod,next;

    while(T[R]!=R)R=T[R];
    //avem radacina in R;

    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]+=rang[y];

}


int main()
{
int op;
in >> n >> op;
for (int i=1 ;i<=n ;++i){
    T[i]=i;
    rang[i]=1;

}
    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));

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


    }


    return 0;
}