Cod sursa(job #3163664)

Utilizator iusty64Iustin Epanu iusty64 Data 31 octombrie 2023 19:52:22
Problema Arbore partial de cost minim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <fstream>
#include <vector>
using namespace std;
const int Vmax = 200001;
int n, m;
int T[Vmax], Rang[Vmax];
ifstream fin("apm.in");
ofstream fout("apm.out");

vector<int> muchii[2*Vmax];

int Radacina(int x){
    if(T[x] == 0)
        return x;
    else{
        T[x] = Radacina(T[x]);
        return Radacina(T[x]);
    }
}

void Unire(int k, int l){
    if(Radacina(k) != Radacina(l)){
        if(Rang[Radacina(k)] > Rang[Radacina(l)])
            T[Radacina(l)] = Radacina(k);
        else{
            T[Radacina(k)] = Radacina(l);
            if(Rang[Radacina(k)] == Rang[Radacina(l)])
                Rang[Radacina(l)]++;
        }
    }
}
int main()
{
    fin>>n>>m;
    int m1=m, cnt=0;
    while(m--){
        cnt++;
        int x, y, c;
        fin>>x>>y>>c;
        muchii[cnt].push_back(x);
        muchii[cnt].push_back(y);
        muchii[cnt].push_back(c);
    }
    for(int i=1;i<=m1;i++)
        for(int j=i+1;j<=m1;j++)
            if(muchii[i][2]>muchii[j][2]) swap(muchii[i], muchii[j]);
    int cost_min=0;
    if(m1>40)
        fout<<"                               ";
    else
        fout<<"                              ";
    int cntt=0;
    for(int i=1;i<=m1;i++){
        if(Radacina(muchii[i][0]) != Radacina(muchii[i][1])){
            Unire(muchii[i][0], muchii[i][1]);
            fout<<muchii[i][0]<<" "<<muchii[i][1]<<'\n';
            cntt++;
            cost_min+=muchii[i][2];
        }
    }
    fout.seekp(0);
    fout<<cost_min<<'\n';
    fout<<cntt<<'\n';
    return 0;
}