Pagini recente » Cod sursa (job #522219) | Cod sursa (job #25882) | Cod sursa (job #2820706) | Cod sursa (job #2590560) | Cod sursa (job #3213519)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int kInf = 1e9;
struct edge_t {
int u, v, c;
edge_t() {}
edge_t(int u, int v, int c): u(u), v(v), c(c) {}
};
vector<edge_t> prim(int s, const vector<vector<pair<int, int>>> &adj) {
int n = adj.size();
vector<edge_t> apm;
vector<int> minEdge(n, kInf), from(n);
vector<bool> vis(n);
minEdge[s] = 0;
for(int i = 0; i < n; i++) {
int u = -1;
for(int v = 0; v < n; v++) {
if(!vis[v] && (u == -1 || minEdge[v] < minEdge[u])) {
u = v;
}
}
if(u != s) {
apm.emplace_back(from[u], u, minEdge[u]);
}
vis[u] = 1;
for(const auto &[v, c]: adj[u]) {
if(c < minEdge[v]) {
minEdge[v] = c;
from[v] = u;
}
}
}
return apm;
}
int main() {
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> adj(n);
for(int i = 0; i < m; i++) {
int u, v, c;
fin >> u >> v >> c;
u--; v--;
adj[u].emplace_back(v, c);
adj[v].emplace_back(u, c);
}
vector<edge_t> apm = prim(0, adj);
int cost = 0;
for(const auto &[u, v, c]: apm) {
cost += c;
}
fout << cost << '\n' << apm.size() << '\n';
for(const auto &[u, v, c]: apm) {
fout << u + 1 << " " << v + 1 << '\n';
}
return 0;
}