Cod sursa(job #3242355)

Utilizator gBneFlavius Andronic gBne Data 11 septembrie 2024 17:01:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>
#include <iostream>

using namespace std;

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

const int NMax = 100005;

int d[NMax], h[NMax];

int up(int x){
    if(d[x] != 0){
        d[x] = up(d[x]);
        return d[x];
    }
    else{
        return x;
    }
}

void unite(int x, int y){
    int rX = up(x), rY = up(y);
    if(h[rX] > h[rY]){
        d[rY] = rX;
        h[rY] = max(h[rY], h[rX] + 1);
        up(y);
    }
    else{
        d[rX] = rY;
        h[rX] = max(h[rX], h[rY] + 1);
        up(x);
    }
}

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

int main()
{
    int N, M;
    fin >> N >> M;
    for(int i = 1; i <= N; ++ i){
        h[i] = 1;
    }
    for(int op, x, y, i = 1; i <= M; ++ i){
        fin >> op >> x >> y;
        if(op == 1){
            unite(x, y);
        }
        else{
            query(x, y);
        }
    }
    return 0;
}