From c81d094e6b2794888ca04cf52e6d8bcfe50007f3 Mon Sep 17 00:00:00 2001 From: userr2232 Date: Sun, 15 May 2022 01:27:55 -0500 Subject: [PATCH] Study/prim.cc --- Study/prim.cc | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/Study/prim.cc b/Study/prim.cc index f20e17f..d34652a 100644 --- a/Study/prim.cc +++ b/Study/prim.cc @@ -2,42 +2,35 @@ #include #include #include -#include #include -#define FOR(i,a,b) for(int i = a; i <= b; ++i) using namespace std; -typedef vector vi; + typedef pair ii; typedef vector vii; typedef vector AdjList; -AdjList graph; -vector taken; -priority_queue> pq; - -void process(int u) { +void process(int u, priority_queue>& pq, vector& taken, AdjList const& graph) { taken[u] = true; - FOR(j,0,graph[u].size()-1) { - auto [v, w] = graph[u][j]; - if(!taken[v]) pq.emplace(w, v); - } + for(auto&& [v, w] : graph[u]) if(!taken[v]) + pq.emplace(w, v); } int main() { int V, E; cin >> V >> E; - graph.resize(V); - taken.assign(V, false); - FOR(i,1,E) { + AdjList graph(V); + vector taken(V, false); + for(int i = 0; i < E; ++i) { int u, v, w; cin >> u >> v >> w; graph[u].emplace_back(v, w); graph[v].emplace_back(u, w); } - process(0); + priority_queue> pq; + process(0, pq, taken, graph); int mst_cost{0}; while(!pq.empty()) { - auto [w, v] = pq.top(); pq.pop(); - if(!taken[v]) mst_cost += w, process(v); + auto [w, u] = pq.top(); + pq.pop(); + if(!taken[u]) mst_cost += w, process(u, pq, taken, graph); } - cout << "mst cost: " << mst_cost << endl; return 0; } \ No newline at end of file