Cod sursa(job #2981652)

Utilizator Stefan314159Stefan Bisti Stefan314159 Data 18 februarie 2023 13:50:32
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <fstream>
#include <map>
#include <vector>
using namespace std;

#define N 100001

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

int n, qr, cc[N];
map<int, vector<int>> m;

void uneste(int x, int y){
    int mini = min(x, y);
    int maxi = max(x, y);

    for(int k : m[cc[maxi]]){
        m[cc[mini]].push_back(k);
        cc[k] = cc[mini];
    }
}


int main(){
    in >> n >> qr;

    for(int i=1; i<=n; i++){
        cc[i] = i;
        m[i].push_back(i);
    }

    while(qr--){
        int q, x, y;
        in >> q >> x >> y;
        if(q == 1)
            uneste(x, y);
        else
            out << (cc[x] == cc[y] ? "DA\n" : "NU\n");
    }
}