Pagini recente » Cod sursa (job #2907642) | Cod sursa (job #348617) | Cod sursa (job #749873) | Cod sursa (job #1627248) | Cod sursa (job #3254915)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
#define inf 1000000000
int n, m;
int ctot;
vector<pair<int, int>> v[200005];
vector<pair<int, int>> res;
set<pair<int, int>> s;
int dist[200005], vec[200005];
bool viz[200005];
int x, y, c;
int main()
{
fin>>n>>m;
for(int i=1; i<=m; i++){
fin>>x>>y>>c;
v[x].push_back({y, c});
v[y].push_back({x, c});
}
for(int i=1; i<=n; i++) dist[i]=inf;
dist[1]=0;
s.insert({0, 1});
while(!s.empty()){
int nod = s.begin()->second;
int cost = s.begin()->first;
viz[nod]=1;
s.erase(s.begin());
ctot+=cost;
if(nod!=1) res.push_back({nod, vec[nod]});
for(auto k:v[nod]){
if(dist[k.first] > k.second && !viz[k.first]){
s.erase({dist[k.first], k.first});
dist[k.first] = k.second;
vec[k.first] = nod;
s.insert({dist[k.first], k.first});
}
}
}
fout<<ctot<<'\n'<<res.size()<<'\n';
for(auto k:res){
fout<<k.first<<' '<<k.second<<'\n';
}
return 0;
}