Cod sursa(job #2421712)

Utilizator CatalinM99Cioboata Mihai Catalin CatalinM99 Data 15 mai 2019 21:06:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>

using namespace std;

#define MAX 100005

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int tata[MAX];
int rang[MAX];
//vector<int>

int find_tata(int x)
{
    if(x == tata[x]) return x;
    else
    {
        tata[x] = find_tata(tata[x]);
        return tata[x];
    }
}

void reuniune(int x, int y)
{
    if(rang[x] >= rang[y]) //In caz de egalitate se reuneste y la x
    {
        tata[y] = tata[x];
        rang[x] =+ rang[y];
    }
    else if(rang[x] < rang[y])
    {
        tata[x] = tata[y];
        rang[y] += rang[x];
    }
}

int main()
{

    int N, M;
    f>>N>>M;
    for(int i = 1; i <= N; i++) //initializare
    {
        tata[i] = i;
        rang[i] = 1;
    }

    for(int i = 0; i < M; i++) //queries
    {
        int x, y, cod;
        f>>cod>>x>>y;
        if(cod == 2)
        {
            if(find_tata(x) == find_tata(y)) g<<"DA\n";
            else g<<"NU\n";
        }
        else
        {
            reuniune(find_tata(x), find_tata(y));
        }
    }
    return 0;
}