Pagini recente » Cod sursa (job #448948) | Cod sursa (job #2742011) | Cod sursa (job #748521) | Cod sursa (job #1007888) | Cod sursa (job #1886838)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define DM 200005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m, a, b, c, sum;
vector < pair<int, int> > g[DM];
int arb[DM];
priority_queue < pair<int, pair<int,int> > > pq;
bool viz[DM];
void make_apm(int start)
{
pq.push(make_pair(0,make_pair(1,0))); // first e dist, second e nodul
while(!pq.empty())
{
int nod = pq.top().second.first;
int venit_din = pq.top().second.second;
int dist = pq.top().first;
pq.pop();
if(!viz[nod])
{
viz[nod] = 1;
sum = sum - dist;
//cout<<nod<<" "<<venit_din<<endl;
arb[nod] = venit_din;
for(auto it: g[nod])
if(!viz[it.first])
pq.push(make_pair(-it.second,make_pair(it.first,nod)));
}
}
}
int main()
{
fin >> n >> m;
for( int i = 1 ; i <= m; i++)
{
fin >> a >> b >> c;
g[a].push_back(make_pair(b,c)); //first e nodul, second e dist
g[b].push_back(make_pair(a,c));
}
make_apm(1);
fout << sum << '\n';
for(int i = 2 ; i <= n; i++)
fout << i << ' ' << arb[i] << '\n';
return 0;
}