Pagini recente » Cod sursa (job #3356256) | Cod sursa (job #865027) | Cod sursa (job #808608) | Cod sursa (job #3356183) | Cod sursa (job #3337064)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
#include <tuple>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
constexpr int INF = 1e9;
int main(){
int n,m;
fin >> n>>m;
vector<vector<pair<int,int>>> lista(n+1);
vector<pair<int,int>> rez;
vector<bool> viz(n+1, false);
vector<int> dist(n+1, INF);
int costtotal=0;
for (int i = 0; i<m; i++) {
int u,v,c;
fin>>u>>v>>c;
lista[u].emplace_back(v,c);
lista[v].emplace_back(u,c);
}
priority_queue< tuple<int,int,int>, vector<tuple<int,int,int>>, greater<>> pq; // cost, u,v
pq.emplace(0,1,-1);
// viz[1] = true;
dist[1] = 0;
while (!pq.empty()) {
auto [cost,u,tata] = pq.top();
pq.pop();
if (viz[u]) continue;
if (tata != -1) {
rez.emplace_back(u,tata);
costtotal += cost;
}
viz[u] = true;
for (auto [v,c] : lista[u]) {
if (!viz[v] && dist[v] >= c) {
pq.emplace(c,v,u);
dist[v] = c;
}
}
}
fout<<costtotal<<endl<<rez.size()<<endl;
for (auto r: rez) {
fout<<r.first<<" "<<r.second<<endl;
}
return 0;
}