Cod sursa(job #3337981)

Utilizator DemonulCristian Razvan Gavrilescu Demonul Data 31 ianuarie 2026 01:26:19
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <bits/stdc++.h>
#define int long long
#define cin fin
#define cout fout
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int Nmax = 1e5;
int n, m;
int parent[Nmax + 50], Sz[Nmax + 50];
int find_parent(int a){
    if(a == parent[a]){
        return a;
    }
    return find_parent(parent[a]);
}
void union_sets(int a, int b){
     a = find_parent(a);
     b = find_parent(b);
     if(a != b){
         if(Sz[a] > Sz[b]){
            swap(a ,b);
         }
         parent[b] = a;
         Sz[a] += Sz[b];
     }
}
signed main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; ++ i){
        parent[i] = i;
        Sz[i] = 1;
    }
    for(int i = 1; i <= m; ++ i){
        int t, x, y;
        cin >> t >> x >> y;
        if(t == 1) {
             union_sets(x,y);
        }
        else{
            x = find_parent(x);
            y = find_parent(y);
            if(x != y)
               cout << "NU" << '\n';

            else cout << "DA" << '\n';
        }
    }
    return 0;
}