Cod sursa(job #2740081)

Utilizator dancu_mihai13Dancu Mihai dancu_mihai13 Data 11 aprilie 2021 12:13:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>
 
using namespace std;
 
ifstream fin  ("disjoint.in");
ofstream fout ("disjoint.out");

const int NMAX = 100005;
int tata[NMAX], rang[NMAX];
int N, M;

void init()
{
    for(int i = 1; i < NMAX; i++)
        tata[i] = i;
}

int get_tata(int nod)
{
    while(tata[nod] != nod)
        nod = tata[nod];
    return nod;
}

void afisare(int x, int y)
{
    if(get_tata(x) == get_tata(y))
        fout << "DA" << '\n';
    else
        fout << "NU" << '\n';
}

void uniune(int x, int y)
{
    int tata_x = get_tata(x);
    int tata_y = get_tata(y);
    
    if(rang[tata_x] > rang[tata_y])
    {
        tata[tata_y] = tata_x;
        rang[tata_x]++;
    }
    else
    {
        tata[tata_x] = tata_y;
        rang[tata_y]++;
    }
}

void paduri_multimi_disjuncte()
{
    fin >> N >> M; int x, y, op;
    for(int i = 0; i < M; i++)
    {
        fin >> op >> x >> y;
        if(op == 1)
            uniune(x, y);
        else
            afisare(x, y);
    }
}

int main()
{
    init();
    paduri_multimi_disjuncte();
    return 0;
}