Cod sursa(job #3334353)

Utilizator alinavoroalina voro alinavoro Data 17 ianuarie 2026 11:26:59
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
//
// Created by avoro on 11/17/2025.
//
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
using namespace std;

///prim
ifstream fin ("apm.in");
ofstream fout ("apm.out");

int main() {
    int n,m,x,y,c;
    fin>>n>>m;
    vector<vector<pair<int,int>>> adj(n+1);
    vector<int> dist(n+1,INT_MAX);
    vector<int> parinte(n+1,-1);
    for (int i = 0; i< m ;i++) {
        fin>>x>>y>>c;
        adj[x].push_back(make_pair(y,c));
        adj[y].push_back(make_pair(x,c));
    }
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
    dist[1] = 0;
    vector<bool> used(n+1,false);
    pq.push(make_pair(0,1));
    vector<pair<int,int>> muchii;
    int cost = 0;
    while (!pq.empty()) {
        pair<int,int> p = pq.top();
        pq.pop();
        if (used[p.second] == true) continue;
        used[p.second] = true;
        cost = cost + dist[p.second];

        if (parinte[p.second] != -1) {
            muchii.push_back(make_pair(parinte[p.second],p.second));
        }
        for (auto [v,w] : adj[p.second]) {
            if (dist[v] > w && used[v] == false) {
                dist[v] = w;
                parinte[v] = p.second;
                pq.push(make_pair(dist[v],v));
            }
        }
    }
    fout<<cost<<endl;
    fout<<muchii.size()<<endl;
    for (auto [n1,n2] : muchii) {
        fout<<n1<<" "<<n2<<endl;
    }
}