Cod sursa(job #2981653)

Utilizator Stefan314159Stefan Bisti Stefan314159 Data 18 februarie 2023 13:54:41
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 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 maxi, mini;
    if(m[x].size() > m[y].size()){
        maxi = y;
        mini = x;
    }
    else{
        maxi = x;
        mini = 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");
    }
}