Cod sursa(job #2907559)

Utilizator crastanRavariu Eugen crastan Data 30 mai 2022 19:16:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100005

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

int n,m;
int p[NMAX];
int size[NMAX];
int get_set(int x){
    if(x == p[x]) return x;
    else return p[x] = get_set(p[x]);
}
void merge(int x, int y){
    if(size[x]<size[y])
        p[x] =y, size[y]+=size[x];
    else p[y] = x, size[x]+=size[y];
}
int main() {

    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        p[i] = i;
        size[i] = 1;
    }
    for (int i = 1; i <= m; ++i) {
        int t,x,y;
        fin >> t >> x >> y;
        if(t == 1){
            int px = get_set(x);
            int py = get_set(y);
            if(px!=py)merge(px,py);
        } else {
            if(get_set(x) == get_set(y)) fout << "DA\n";
            else fout << "NU\n";
        }
    }
    return 0;
}