Cod sursa(job #2870163)

Utilizator pregoliStana Andrei pregoli Data 12 martie 2022 10:22:33
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
#define newline '\n'
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
///***********************
const int NMAX = 1e5 + 3;
int daddy[NMAX], n, m;

int findRoot(int start) {
    int root = start;
    while (daddy[root]) {
        root = daddy[root];
    }
    while (daddy[start]) {
        int aux = daddy[start];
        daddy[start] = root;
        start = aux;
    }
    return root;
}

int main() {
    fin >> n >> m;

    for (int i = 0; i < m; i++) {
        int x, y, op;
        fin >> op >> x >> y;
        int root1 = findRoot(x);
        int root2 = findRoot(y);
        if (op == 1 && root1 != root2)
            daddy[root1] = root2;
        else {
        if (root1 == root2)
            fout << "DA" << newline;
        else
            fout << "NU" << newline;
        }
    }
    return 0;
}