Cod sursa(job #3197568)

Utilizator Frant_IoanaFrant Ioana Frant_Ioana Data 27 ianuarie 2024 09:57:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n, m, tata[100001], lg[100001], op, x, y;

void unesc(int radx, int rady){
    if(lg[radx] < lg[rady])
        tata[radx] = rady;
    else if(lg[radx] > lg[rady])
        tata[rady] = radx;
    else
        tata[rady] = radx, lg[radx]++;
}

void sunt(int radx, int rady){
    if(radx == rady)
        fout << "DA";
    else
        fout << "NU";
    fout << '\n';
}

int rad(int x){
    while(x != tata[x])
        x = tata[x];
    return x;
}

int main(){

    fin >> n >> m;
    for(int i = 1; i <= n; i++)
        tata[i] = i, lg[i] = 1;

    for(int i = 1; i <= m; i++){
        fin >> op >> x >> y;
        int radx = rad(x);
        int rady = rad(y);

        if(op == 1){
            ///unesc x si y
            unesc(radx, rady);
        }
        else
            sunt(radx, rady);
    }
}