Cod sursa(job #2808222)

Utilizator Angel2IonitaAngel Ionita Angel2Ionita Data 24 noiembrie 2021 18:52:58
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream f("disjoint.in");
ofstream o("disjoint.out");
const int Nmax=100010;

class DisjointSets
{
    int rank[Nmax], parent[Nmax];
    int size;
public:
    DisjointSets(int n)
    {
        size = n;
        for (int i = 0; i < size; i++)
        {
            parent[i] = i;
            rank[i] = 1;
        }
    }
    int find(int x)
    {
        if(parent[x]!=x)
            parent[x]=find(parent[x]);
        return parent[x];
    }

    void Union(int x, int y)
    {

        int fx = find(x);
        int fy = find(y);
        if (rank[fx] < rank[fy])
            parent[fx] = fy;
        else
            parent[fy] = fx;
        if(rank[fx]==rank[fy])
            rank[fx]++;
    }
};

int main()
{
    int N, M;
    int cod, x, y;
    f >> N >> M;
    DisjointSets ds(N);
    for (int i = 1; i <= M; i++)
    {
        f >> cod >> x >> y;
        x--;
        y--;
        if (cod == 1)
            ds.Union(x, y);
        else
        {
            if (ds.find(x) == ds.find(y))
                o << "DA" << endl;
            else
                o << "NU" << endl;
        }
    }
    return 0;
}