Cod sursa(job #3164377)

Utilizator iulia_tamasTamas Iulia iulia_tamas Data 2 noiembrie 2023 23:32:57
Problema Arbore partial de cost minim Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int h[100],tata[100];
vector<vector<int>> adiacenta;
void init(int x){
    h[x]=0;
    tata[x]=h[x];
}

int reprez(int x){
    while(tata[x] != 0)
        x=tata[x];
    return x;
}

void reuneste(int x, int y){
    int rx = reprez(x);
    int ry = reprez(y);
    if(h[rx]>h[ry])
        tata[ry]=rx;
    else {
        tata[rx]=ry;
        if(h[rx]==h[ry])
            h[ry]=h[ry]+1;
    }

}

void kruskal(vector<vector<int>> ad,vector<vector<int>> &muchie){
    int cost_final=0, muchii = 0;
    sort(ad.begin(), ad.end());
    for(auto &m:ad){
        int c = m[0];
        int x= m[1];
        int y= m[2];

        if(reprez(x)!= reprez(y)){
            reuneste(x,y);
            muchii++;
            muchie.push_back({x,y});
            cost_final+=c;
        }
    }
    fout<< cost_final<<endl<<muchii<<endl;

}

int main()
{
    int n, m, x,y,c;
    fin>>n>>m;
    //adiacenta.resize(n+1);
    //cost.resize(n+1);
    for(int i=0; i<m; i++){
        fin>>x>>y>>c;
        adiacenta.push_back({c,x,y});
    }
    vector<vector<int>> raspuns;
    kruskal(adiacenta, raspuns);
    for(auto &i:raspuns){
        fout<<i[0]<<' '<<i[1]<<endl;
    }
    return 0;
}