Cod sursa(job #2422749)

Utilizator Natasa_CirsteaCirstea Natasa Alexandra Natasa_Cirstea Data 19 mai 2019 20:45:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

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

int get_reprezentant(int nod,vector<int>&reprezentant)
{
    if(nod==reprezentant[nod])
        return nod;
    return get_reprezentant(reprezentant[nod],reprezentant);
}

void uneste(int nod1,int nod2,vector<int>&reprezentant,vector<int>&adancime)
{
    int rep_nod1=get_reprezentant(nod1,reprezentant);
    int rep_nod2=get_reprezentant(nod2,reprezentant);
    if(adancime[rep_nod1]<adancime[rep_nod2])
        reprezentant[rep_nod1]=rep_nod2;
    else
    {
        reprezentant[rep_nod2]=rep_nod1;
        if(adancime[rep_nod1]==adancime[rep_nod2])
            adancime[rep_nod1]++;
    }
}

int main()
{
    int n,m,op,x,y,i;
    f>>n>>m;
    vector<int>reprezentant(n+1);
    vector<int>adancime(n+1,0);
    for(i=1; i<=n; i++)
        reprezentant[i]=i;
    for(i=1; i<=m; i++)
    {
        f>>op>>x>>y;
        if(op==1)
            uneste(x,y,reprezentant,adancime);
        else if(op==2)
        {
            if(get_reprezentant(x,reprezentant)==get_reprezentant(y,reprezentant))
                g<<"DA\n";
            else
                g<<"NU\n";
        }
    }
    return 0;
}