Cod sursa(job #2935687)

Utilizator IRadu1529Radu Ionescu IRadu1529 Data 7 noiembrie 2022 12:02:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

vector <int> p;

int n, m, cod;

//O(m * logn) 

int Find(const int& a)
{
    if (p[a] == 0)
        return a; 

   p[a] = Find(p[a]);

   return p[a];
}

void Union(const int& a, const int& b)
{
    int tx = Find(a);
    int ty = Find(b);
    
    if (tx != ty) {

        if (cod == 1)
            p[tx] = ty;
        else fout << "NU\n";
    }

    else if (cod == 2)
        fout << "DA\n";
}

int main()
{
    int a, b;
    fin >> n >> m;
    p.resize(n + 1);

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

    for (int i = 0; i < m; i++){
        fin >> cod >> a >> b;

        Union(a, b);
    }

    return 0;
}