Pagini recente » Rating boboc vasile (dragon) | Statistici Tudor Podina (tudor.podina) | Cod sursa (job #1626817) | Cod sursa (job #1496091) | Cod sursa (job #3206429)
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <bitset>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int NMAX=100005;
vector<pair<int, int>> G[NMAX];
bitset<NMAX> viz;
priority_queue<tuple<int, int, int>> pq;
int n, m, s=0, cost, nod, k;
pair<int, int> sol[NMAX];
void citire()
{
fin>>n>>m;
for(int i=1; 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(int start)
{
pq.push(make_tuple(0, start, 0));
while(!pq.empty())
{
int nod=get<1>(pq.top());
int nod2=get<2>(pq.top());
int cost=-get<0>(pq.top());
pq.pop();
if(!viz[nod])
{
viz[nod]=1;
s+=cost;
k++;
sol[k]=make_pair(nod, nod2);
for(auto i: G[nod])
{
int vecin=i.first;
int costv=i.second;
if(!viz[vecin])
pq.push(make_tuple(-costv, vecin, nod));
}
}
}
}
int main()
{
citire();
apm(1);
fout<<s<<endl<<k-1<<endl;
for(int i=2; i<=k; ++i)
fout<<sol[i].first<<" "<<sol[i].second<<endl;
}