Cod sursa(job #2937981)

Utilizator kanyjmkSabau Eduard kanyjmk Data 11 noiembrie 2022 15:08:27
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>



using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int Find(int x, vector<int>& parent)
{
    if(x == parent[x])
        return x;
    else return parent[x] = Find(parent[x], parent);
}
void Union(int x, int y, vector<int>& parent, vector<int>& rank)
{
    int rootx = Find(x, parent);
    int rooty = Find(y, parent);

    if(rank[rootx] > rank[rooty])
        parent[rooty] = rootx;
    else if(rank[rooty] > rank[rootx])
            parent[rootx] = rooty;
        else 
        {
            parent[rootx] = rooty;
            rank[rooty]++;
        }

}
int main()
{
    int n, m;
    vector<int> parent(n+1);
    vector<int> rank(n+1);
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
        {
            parent[i] = i;
            rank[i] = 1;
        }
    int cod, x, y;
    for(int i = 1; i <= m; i++)
    {
        fin >> cod >> x >> y;
        if(cod == 1)
            Union(x, y, parent, rank);
        else 
        {
            if(Find(x, parent) != Find(y, parent))
                fout << "NU\n";
            else fout << "DA\n";
        }
    }
    return 0;
}