Cod sursa(job #2839666)

Utilizator cezar.balutaCezar Baluta cezar.baluta Data 26 ianuarie 2022 12:12:37
Problema Arbore partial de cost minim Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

struct muchie{
    int x,y,cost;
};

const int N = 2e5 + 5;
vector <muchie> muchii;
int radacini[N];
vector <int> raspuns;
vector<int>v[N];

bool criteriu(muchie a, muchie b){
    return a.cost<b.cost;
}

void uupdate(int x,int val){
    radacini[x] = val;
    for(auto q:v[x]){
       if(radacini[q]!=val)
        uupdate(q,val);
    }
}

int main()
{
    int n,m;
    ifstream in("apm.in");
    ofstream out("apm.out");
    in>>n>>m;
    for(int i=1;i<=n;i++)
        radacini[i] = i;
    int cost = 0;
    muchie w;
    while(m--){
        in>>w.x>>w.y>>w.cost;
        muchii.push_back(w);
    }
    sort(muchii.begin(),muchii.end(),criteriu);

    for(auto y: muchii){
        if(radacini[y.x] != radacini[y.y]){
            cost += y.cost;
            raspuns.push_back(y.x);
            raspuns.push_back(y.y);
            v[y.x].push_back(y.y);
            v[y.y].push_back(y.x);
            uupdate(y.y,radacini[y.x]);
        }
    }
    out<<cost<<'\n';
    int l = raspuns.size();
    out<<l/2<<'\n';
    for(int i=0;i<l;i+=2){
        out<<raspuns[i]<<' '<<raspuns[i+1]<<'\n';
    }
    return 0;
}