Cod sursa(job #2569298)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 4 martie 2020 11:46:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
//ALEXANDRU MICLEA

#include <bits/stdc++.h>
using namespace std;

#include <fstream>
ifstream fin("disjoint.in"); ofstream fout("disjoint.out");

//VARIABLES

int tata[100005];
int nrelem[100005];
int m, n, c;

//FUNCTIONS

int stramos(int q){
    if (q != tata[q]){
        tata[q] = stramos(tata[q]);
    }
    return tata[q];
}

void unite(int a, int b){
    if (nrelem[tata[a]] > nrelem[tata[b]]){
        int cop = nrelem[tata[b]];
        tata[a] = tata[b];
        nrelem[tata[a]] += cop;
    } else {
        int cop = nrelem[tata[a]];
        tata[b] = tata[a];
        nrelem[tata[b]] += cop;
    }
}


//MAIN
int main() {

    fin >> n >> m;
    for (int i = 1; i <= n; i++){
        tata[i] = i;
        nrelem[i] = 1; ///aici era i
    }

    for (int i = 1; i <= m; i++){
        int x, y;
        fin >> c >> x >> y;
        if (c == 1) unite(stramos(x), stramos(y));
        else{
            if (stramos(x) == stramos(y)) fout << "DA\n";
            else fout << "NU\n";
        }
    }
}