Cod sursa(job #2691913)

Utilizator denisa.iordacheIordache Denisa-Elena denisa.iordache Data 30 decembrie 2020 18:02:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

const int NMAX = 100010;

int N, M;
int t[NMAX], rang[NMAX];

int parent (int nod)  //functie pentru determinarea inceputului unei componente conexe
{
    while (t[nod]!=nod)
            nod = t[nod];
    return nod;

}

void union_by_rank ( int nod1, int  nod2)
{
    if (rang[nod1] < rang[nod2])
        t[nod1] = nod2;
    else
        if (rang[nod1] == rang [nod2])
        {
            t[nod1] = nod2;
            rang[nod2]++;
        }
        else
            t[nod2] = nod1;
}

int main() {

    ifstream f ("disjoint.in");
    ofstream g("disjoint.out");
    f>>N>>M;
    int x,y,op;
    for(int i=1;i<=N;i++)
    {
        t[i] = i;
        rang[i] = 1;
    }
    for(int i = 0; i <M; i++)
    {
        f>> op>>x>>y;
        if(op==1)
        {
            union_by_rank(parent(x),parent(y));
        }
        else
        {
            if(parent(x)==parent(y))
                g<<"DA\n";
            else
                g<<"NU\n";
        }

    }
    return 0;
}