Cod sursa(job #2689601)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 21 decembrie 2020 15:41:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
//ALEXANDRU MICLEA
 
#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
#include <assert.h>
 
using namespace std;
using ll = long long;
 
#include <fstream>
//ifstream cin("input.in"); ofstream cout("output.out");
ifstream cin("disjoint.in"); ofstream cout("disjoint.out");
 
//VARIABLES

const int maxn = 1e5 + 5;

int dad[maxn];
 
//FUNCTIONS

int find(int nod){
    if (dad[nod] == nod) return nod;
    return find(dad[nod]);
}

void merge(int a, int b){

    int A = find(a);
    int B = find(b);

    if (A != B) dad[B] = A;
}

string query(int a, int b){
    
    int A = find(a);
    int B = find(b);

    if (A == B) return "DA";
    return "NU";
}

//MAIN
 
int main() {
    
    int n, q; cin >> n >> q;

    for (int i = 1; i <= n; i++) dad[i] = i;

    for (int i = 1; i <= q; i++){
        int tip, a, b; cin >> tip >> a >> b;
    
        if (tip == 1) merge(a, b);
        if (tip == 2) cout << query(a, b) << '\n';
    }

    return 0;
}