Cod sursa(job #2637984)

Utilizator FilipCuciucFilip Cuciuc FilipCuciuc Data 26 iulie 2020 11:49:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.51 kb
//
//  main.cpp
//  C++ - teste
//
//  Created by Filip Cuciuc on 03/02/2020.
//  Copyright © 2020 Filip Cuciuc. All rights reserved.
//

//#include <iostream>
#include <stdio.h>
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <math.h>
#include <map>
#include <string>
#include <cctype>
//#include "MED.h"
using namespace std;
//using namespace std::chrono;

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

const int MAX = 1e5 + 5;
const int INF = 2e9;
int n, m, supertata;
int tata[MAX], lungime[MAX];

int cureCancerFunc(int nod) {
    if (nod != tata[nod]) {
        tata[nod] = cureCancerFunc(tata[nod]);
    }
    return tata[nod];
}

void reuniune(int a, int b){
    if (lungime[tata[a]] > lungime[tata[b]]) {
        int l = lungime[tata[b]];
        tata[b] = tata[a];
        lungime[tata[a]] += l;
    } else {
        int l2 = lungime[tata[a]];
        tata[a] = tata[b];
        lungime[tata[b]] += l2;
    }
}

void read() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        tata[i] = i;
        lungime[i] = 1;
    }
    for (int i = 1; i <= m; i++) {
        int op, A, B;
        cin >> op >> A >> B;
        if (op == 1)
            reuniune(cureCancerFunc(A), cureCancerFunc(B));
         if (op == 2) {
             if (cureCancerFunc(A) == cureCancerFunc(B))
                 cout << "DA" << '\n';
              else
                  cout << "NU" << '\n';
        }
    }
}


void solve() {
    read();
    
   
}

int main() {

    solve();

    return 0;
}