Cod sursa(job #2807230)

Utilizator AndreeaCreitaCreita Andreea AndreeaCreita Data 23 noiembrie 2021 16:35:17
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
#define Nmax 10010
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int par[Nmax];
int dim[Nmax];
int find_radacina(int x)
{
    while(x!=par[x])  //parcurgem cat timp x are parinte
        x=par[x];
    return x;
}

void unite(int a, int b)
{
    int x = find_radacina(a);
    int y = find_radacina(b);
    if(dim[x] > dim[y])
    {
        par[y] = x;
        dim[x]+=dim[y];
    }
    else
    {
        par[x] = y;
        dim[y] += dim[x];
    }

}
/*
void init()
{
    int n;
    for(int i=1; i<=n; ++i)
    {
        par[i]=i;
        dim[i]=1;
    }
} */
int main()
{
    int n, m;
    fin>> n >> m;

    for(int i=1; i<=n; i++)
    {
        par[i] = i;
    }

    while (m--)
    {
        int cod, a, b;
        fin>> cod >> a >> b;
        if(cod == 1)
        {
            unite(a,b);
        }
        else
        {
            if(find_radacina(a) == find_radacina(b))
                fout << "DA\n";

            else
                fout << "NU\n";
        }
    }
    return 0;
}