Cod sursa(job #1650480)

Utilizator RaTonAndrei Raton RaTon Data 11 martie 2016 18:39:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");

int n, m, NRV[100001], P[100001];

int stramos( int x ){
    int start;
    start = x;
    while( P[x] != x )
        x = P[x];
    while( P[start] != x ){
        P[start] = x;
        start = P[start];
    }
    return x;
}

void op1( int x, int y ){
    int nx, ny;
    nx = stramos(x);
    ny = stramos(y);
    if( nx <= ny ){
        NRV[ny] += NRV[nx];
        P[nx] = P[ny];
    }
    else{
        NRV[nx] += NRV[ny];
        P[ny] = P[nx];
    }
}

void op2( int x, int y){
    if( stramos(x) == stramos(y) )
        fo << "DA\n";
    else
        fo << "NU\n";
}

int main(){
    int i, t, x, y;
    fi >> n >> m;
    for( i = 1; i <= n; i++ ){
        P[i] = i;
        NRV[i] = 1;
    }

    for( i = 1; i <= m; i++ ){
        fi >> t >> x >> y;
        if( t == 1 )
            op1(x,y);
        else
            op2(x,y);
    }

    return 0;
}