Cod sursa(job #2911914)

Utilizator dgivanDan Grigore Ivan dgivan Data 4 iulie 2022 21:04:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include<iostream>
#include<set>
#include<algorithm>
#include <vector>
#include <fstream>
#include <cstring>
#include <map>
#include <math.h>
#include <queue>
#include <stack>

using namespace std;

int n, m;
int tt[110000];
int sz[110000];

int Find (int x){
    if (tt[x] == x){
        return x;
    }
    else {
        return tt[x] = Find(tt[x]);
    }
}

void Union (int a, int b){
    if (a!=b){
        if (sz[a]>=sz[b]){
            tt[b] = a; // radacina lui b este a
            sz[a] += sz[b];
        }
        else {
            tt[a] = b;
            sz[b] += sz[a];
        }
    }
}

int main (){
    
    ifstream cin ("disjoint.in");
    ofstream cout ("disjoint.out");
    
    cin >> n >> m;

    for (int i = 1; i<=n; i++){
        tt[i] = i;
        sz[i] = 1;
    }

    for (int i = 1; i<=m; i++){
        int cod, x, y;
        cin >> cod >> x >> y;
        if (cod == 1){
            Union (Find(x), Find(y));
        }
        else {
            if (Find (x) == Find (y)){
                cout << "DA" << "\n";
            }
            else {
                cout << "NU" << "\n";
            }
        }


    }
}