Pagini recente » Cod sursa (job #1316964) | Cod sursa (job #2999058) | Cod sursa (job #1645694) | Cod sursa (job #1502032) | Cod sursa (job #3341204)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int NMAX = 2e5 + 1;
int n, m, parent[NMAX];
bool in_mst[NMAX];
vector<pair<int, int>> adj[NMAX], mst;
int Prim()
{
int sum = 0;
in_mst[1] = true;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
for(auto [next, cost] : adj[1])
{
pq.push({cost, next});
parent[next] = 1;
}
while(!pq.empty())
{
auto [cost, node] = pq.top(); pq.pop();
if(in_mst[node])
continue;
in_mst[node] = true;
sum += cost;
mst.emplace_back(parent[node], node);
for(auto [next, new_cost] : adj[node])
{
if(in_mst[next])
continue;
pq.push({new_cost, next});
parent[next] = node;
}
}
return sum;
}
int main()
{
fin >> n >> m;
while(m--)
{
int u, v, cost;
fin >> u >> v >> cost;
adj[u].emplace_back(v, cost);
adj[v].emplace_back(u, cost);
}
fout << Prim() << "\n" << mst.size() << "\n";
for(auto [u, v] : mst)
fout << u << " " << v << "\n";
fin.close();
fout.close();
return 0;
}