Cod sursa(job #3337375)

Utilizator Mateixx1Trandafir Matei Mateixx1 Data 27 ianuarie 2026 15:45:05
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <queue>
#include <vector>
#include <fstream>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int INF=999999999;
int n,m,x,y,z,COST,D[200010],T[200010];
bool viz[200010];
vector<pair<int,int>>Fin;
struct muc {
    int y,cos;
    bool operator <(const muc &a)const {
        return cos>a.cos;
    }
};
vector<muc>G[200010];
priority_queue<muc>Q;

void prim() {
    for(int i=2; i<=n; i++) {
        D[i]=INF;
    }
    Q.push({1,0});
    while(!Q.empty()) {
        auto nod=Q.top();
        Q.pop();
        if(viz[nod.y]) {
            continue;
        }
        viz[nod.y]=1;
        COST+=D[nod.y];
        if(T[nod.y]) {
            Fin.push_back({nod.y,T[nod.y]});
        }
        for(const auto&m:G[nod.y]) {
            if(!viz[m.y]&&m.cos<D[m.y]) {
                D[m.y]=m.cos;
                T[m.y]=nod.y;
                Q.push(m);
            }
        }
    }
}

int main() {
    f>>n>>m;
    for(int i=1; i<=m; i++) {
        f>>x>>y>>z;
        G[x].push_back({y,z});
        G[y].push_back({x,z});
    }
    prim();
    g<<COST<<'\n'<<Fin.size()<<'\n';
    for(const auto&[a,b]:Fin) {
        g<<a<<' '<<b<<'\n';
    }
    f.close();
    g.close();
    return 0;
}