Cod sursa(job #1815788)

Utilizator ovidiu_zic@yahoo.comPurecel Mihai [email protected] Data 25 noiembrie 2016 19:33:07
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");

const int N = 100001;
int t[N], v[1], h[N];




int radacina(int x){
    if(t[x]==0) return x;
    t[x] = radacina(t[x]);
    return t[x];
}

void reuniune(int x, int y){
    int rx = radacina(x), ry = radacina(y);
    if(h[rx]<h[ry])
        t[rx] = ry;
    else if(h[rx]>h[ry])
        t[ry] = rx;
    else{
        t[rx] = ry;
        h[ry]++;
    }
}

bool verific(int x, int y){
    return(radacina(x) == radacina(y));
}


int main()
{
    int op,n,m,i,x,y;
    in>>n>>m;
    for(i=1;i<=n;i++)
        v[i] = i;
    for(i=1;i<=m;i++){
        in>>op>>x>>y;
        if(op == 1)
            reuniune(v[x], v[y]);
        else
            if( verific(v[x],v[y])   )
                out<<"DA \n";
            else
                out<<"NU \n";
    }



    return 0;
}