Pagini recente » Cod sursa (job #240218) | Cod sursa (job #2521951) | Cod sursa (job #785636) | Cod sursa (job #1470951) | Cod sursa (job #2987503)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#include <tuple>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int NMAX = 200005;
vector <pair<int, int> > G[NMAX];
priority_queue<tuple<int, int, int> > pq;
bitset <NMAX> viz;
int n, m, s, tata[NMAX];
void citire()
{
fin>>n>>m;
for(int i=0; i<m; ++i)
{
int x, y, c;
fin>>x>>y>>c;
G[x].push_back(make_pair(y, c));
G[y].push_back(make_pair(x, c));
}
}
void apm()
{
pq.push(make_tuple(0, 1, 0));
while(!pq.empty())
{
int nod=get<1>(pq.top());
int cost=-get<0>(pq.top());
int nod2=get<2>(pq.top());
pq.pop();
if(viz[nod])
continue;
viz[nod]=1;
tata[nod]=nod2;
s+=cost;
for(auto nbr: G[nod])
if(!viz[nbr.first])
pq.push(make_tuple(-nbr.second, nbr.first, nod));
}
fout<<s;
}
int main()
{
citire();
apm();
fout<<endl;
fout<<n-1<<endl;
for(int i=2; i<=n; ++i)
fout<<i<<" "<<tata[i]<<endl;
}