Cod sursa(job #2816603)

Utilizator catarau.bianca.Bianca Catarau catarau.bianca. Data 11 decembrie 2021 18:47:21
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <bits/stdc++.h>
#include <tuple>

using namespace std;

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

class graf{

private:
    int n,m;
    vector<int> parinte;
    vector<int>dimensiune;

public:
    int radacina_disjuncte(int n);
    void uniune_disjuncte(int x,int y);
    bool aceeasi_padure(int x, int y);
    void disjuncte();
    graf(int n);
    graf(int n,  int m);
};

graf::graf(int n, int m)
{
    this->n=n;
    this->m=m;
}

int graf:: radacina_disjuncte(int n){
    while(n!=parinte[n]){
        n=parinte[n];
    }
    return n;
}

void graf::uniune_disjuncte(int x, int y){
    if (radacina_disjuncte(x)!=radacina_disjuncte(y))
    {   if(dimensiune[x]>dimensiune[y])
            {parinte[radacina_disjuncte(y)]=radacina_disjuncte(x);
            dimensiune[x] += dimensiune[y];}
        else
            {parinte[radacina_disjuncte(x)]=radacina_disjuncte(y);
            dimensiune[y] += dimensiune[x];}
    }
}

void graf::disjuncte(){
    int n,m, comanda,x ,y;
    f>>n>>m;
    vector<int>parinte;
    vector<int>dimensiune;
    for ( int i = 1; i <= n; i++ )
        {parinte[i] = i;
        dimensiune[i]=1;}
    for(int i=1;i<m;i++){
        f>>comanda>>x>>y;
        if (comanda==1)
            uniune_disjuncte( x, y);
        else if(comanda==2)
            {if(radacina_disjuncte(x)==radacina_disjuncte(y))
               g<<"Da";
            else g<<"nu"; }}
}

/*
bool graf::aceeasi_padure(int x, int y){
    if (radacina_disjuncte(x)==radacina_disjuncte(y))
        return true;
    return false;
}*/

int main(){
    int n,m;
    f>>n>>m;
    graf G(n,m);
    G.disjuncte();
    return 0;
}