Cod sursa(job #3296240)

Utilizator Traian_7109Traian Mihai Danciu Traian_7109 Data 12 mai 2025 11:11:56
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int MAXN = 200000;

vector<pair<int, int>> g[MAXN + 1];

struct Edge {
  int u, v, w;
};

bool operator < (Edge a, Edge b) {
  return a.w > b.w;
}

priority_queue<Edge> pq;
int viz[MAXN + 1];
vector<Edge> edges;

int main() {
  int n, m;
  fin >> n >> m;
  for(int i = 1; i <= m; i++) {
    int u, v, w;
    fin >> u >> v >> w;
    g[u].push_back({v, w});
    g[v].push_back({u, w});
  }

  int answer = 0;
  pq.push({1, 1, 0});
  while(!pq.empty()) {
    Edge curr = pq.top();
    pq.pop();
    int node = curr.v;
    if(!viz[node]) {
      viz[node] = 1;
      answer += curr.w;
      edges.push_back(curr);
      for(auto edge : g[node]) {
        if(!viz[edge.first]) {
          pq.push({node, edge.first, edge.second});
        }
      }
    }
  }

  fout << answer << "\n" << n - 1 << "\n";
  for(int i = 1; i < n; i++) {
    fout << edges[i].u << " " << edges[i].v << "\n";
  }

  return 0;
}