Cod sursa(job #1824140)

Utilizator mdiannnaMarusic Diana mdiannna Data 7 decembrie 2016 13:57:39
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <stdio.h>

using namespace std;
int N, M;

int r[100001];
int dim[100001];

void init(){
    for(int i=1; i<=N; i++){
        r[i] = i;
        dim[i] = 1;
    }
}

void join(int x, int y){
    int i, j;
    dim[x] > dim[y] ? i=x, j=y: i=y; j=x;
    r[j] = r[i];

    if(dim[i]>dim[j]){
       dim[j] = dim[i];
    }
    else{
        dim[i] = dim[j] = dim[i] + 1;
    }

}

void aceeasi_multime(int x, int y){
    if(r[x] == r[y])
        cout << "DA\n";
    else
        cout << "NU\n";
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);


    int op, x, y;

    cin >> N  >> M;
    init();
    for(int i=0; i<M; i++){
        cin >> op >> x >> y;
        if(op == 1)
            join(x, y);
        else
            aceeasi_multime(x, y);
    }

    return 0;
}