Cod sursa(job #3310950)

Utilizator Andreea3425Diaconu Andreea Andreea3425 Data 18 septembrie 2025 11:03:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <unordered_map>

using namespace std;

ifstream cin ("disjoint.in");
ofstream cout ("disjoint.out");

struct QUERY{
    int u, v, cer;
}query[100001];

struct DSU{
    unordered_map <int, int> adj;
    void init(int q){
        for (int i=0; i<q; i++){
            adj[query[i].u]=query[i].u;
            adj[query[i].v]=query[i].v;
        }
    }
    int fid(int i){
        if (adj[i]==i)
            return i;
        return adj[i]=fid(adj[i]);
    }
    void unit(int i, int j){
        i=fid(i);
        j=fid(j);
        if (adj[i]==adj[j])
            return;
        adj[j]=i;
    }
};

int main()
{
    int n,q,i;
    cin >> n >> q;
    for (i=0; i<q; i++)
        cin >> query[i].cer >> query[i].u >> query[i].v;
    DSU dsu;
    dsu.init(q);
    for (i=0; i<q; i++){
        if (query[i].cer==1)
            dsu.unit(query[i].u, query[i].v);
        else{
            if (dsu.fid(query[i].u)==dsu.fid(query[i].v))
                cout << "DA" << '\n';
            else
                cout << "NU" << '\n';
        }
    }
    return 0;
}