Cod sursa(job #2935481)

Utilizator valentin12Valentin Ion Semen valentin12 Data 6 noiembrie 2022 19:20:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
// Paduri de multimi disjuncte

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int r[100001], v[100001], n, m;

int find(int x)
{

    int rad, y;

    for(rad = x; rad != v[rad]; rad = v[rad]);

    for(; x != rad; x = y)
    {
        y = v[x];
        v[x] = rad;
    }

    return rad;

}

void unite(int x, int y)
{

    if(r[x] > r[y])
        v[y] = x;
    else if(r[x] < r[y])
        v[x] = y;
    else
    {
        v[x] = y;
        r[y]++;
    }    
        

}

int main()
{

    int i, x, y, cod;

    f >> n >> m;

    for (i = 1; i <= n; i++)
    {
        v[i] = i;
        r[i] = 1;
    }


    for(i = 1; i <= m; i++)
    {

        f >> cod >> x >> y;

        if(cod == 1)
        {
            if(find(x) == find(y))
                g << i;
            else
                unite(find(x), find(y));
        }
        else
        {
            if(find(x) == find(y))
                g << "DA" << '\n';
            else
                g << "NU" << '\n';
        }

    }



    return 0;

}