Cod sursa(job #2675231)

Utilizator Dorin07Cuibus Dorin Iosif Dorin07 Data 21 noiembrie 2020 11:31:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#define NMAX 100005
using namespace std;

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

int n, m, cod, x, y;
int c[NMAX], card[NMAX];

int find_parent(int nod){
    if(c[nod] != nod){
        c[nod] = find_parent(c[nod]);
        return c[nod];
    }
    return nod;
}

void reunion(int x, int y){
    x = find_parent(x);
    y = find_parent(y);
    if(card[x] < card[y])
        swap(x, y);
    card[x] += card[y];
    c[y] = x;
}

bool same(int x, int y){
    x = find_parent(x);
    y = find_parent(y);
    return x == y;
}

void read(){
    f>>n>>m;
    for(int i = 1; i <= n; ++i){
        c[i] = i;
        card[i] = 1;
    }
    for(int i = 1; i <= m; ++i){
        f>>cod>>x>>y;
        if(cod == 1){
            reunion(x, y);
        }else if(cod == 2){
            if(same(x, y))
                g<<"DA\n";
            else
                g<<"NU\n";
        }
    }
}

int main(){
    read();
    return 0;
}