Cod sursa(job #3361137)

Utilizator Belea_DariusBelea Mihai Darius Belea_Darius Data 20 iulie 2026 21:07:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define MAXN 100000

using namespace std;

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

int sef[MAXN + 1], sz[MAXN + 1];

int find_sef(int i){
    if(sef[i] == i){
        return i;
    }
    return find_sef(sef[i]);
}
void merge_sef(int a, int b){
    int sef_a, sef_b;
    sef_a = find_sef(a);
    sef_b = find_sef(b);

    if(sz[sef_a] < sz[sef_b]){
        swap(sef_a, sef_b);
    }
    sef[sef_b] = sef_a;
    sz[sef_a] += sz[sef_b];
}

int main()
{
    int n, m, i, t, x, y;

    fin >> n >> m;
    for(i = 1; i <= n; i++){
        sef[i] = i;
        sz[i] = 1;
    }

    while(m--){
        fin >> t >> x >> y;

        if(t == 1){
            merge_sef(x, y);
        }else{
            if(find_sef(x) == find_sef(y)){
                fout << "DA\n";
            }else{
                fout << "NU\n";
            }
        }
    }
    return 0;
}