Cod sursa(job #2397150)

Utilizator boguklMirzea Bogdan bogukl Data 4 aprilie 2019 11:10:43
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

int gaseste_adancime(vector<int>&,int);
int gaseste_tata(vector<int>&,int);
void disjoint();

int main()
{


    disjoint();
    return 0;
}
void disjoint()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");


    int n,m;
    fin>>n>>m;
    vector<int>parinte(n+1);



    for(int i=1; i<=n; i++)
        parinte[i]=i;

    int cod,x,y;
    for(int i=0;i<m;i++)
    {
        fin>>cod>>x>>y;
        if(cod==1)
        {
            if(gaseste_tata(parinte,x)!=gaseste_tata(parinte,y))
                if(gaseste_adancime(parinte,x)>gaseste_adancime(parinte,y))
                    parinte[y]=x;
                else
                    parinte[x]=y;
        }
        if(cod==2)
        {
            if(gaseste_tata(parinte,x)==gaseste_tata(parinte,y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }
}

int gaseste_adancime(vector<int>&parinte,int nod)
{
    if(parinte[nod]==nod)
        return 1;
    return 1+gaseste_adancime(parinte,parinte[nod]);
}

int gaseste_tata(vector<int>&parinte,int nod)
{
    if(parinte[nod]==nod)
        return nod;

    parinte[nod]=gaseste_tata(parinte,parinte[nod]);
    return parinte[nod];
}