Pagini recente » Cod sursa (job #2968403) | Cod sursa (job #1353868) | Cod sursa (job #935948) | Cod sursa (job #729624) | Cod sursa (job #1889840)
#include <cstdio>
#include <vector>
#include <queue>
#include <bitset>
using namespace std;
const int nmx = 200002;
int n,m,total;
pair <int,int> v[nmx];
vector <pair<int,int> > g[nmx];
priority_queue <pair<int,pair<int,int> > > q;
bitset <nmx> viz;
void citire()
{
scanf("%d %d", &n, &m);
for(int i = 1; i <= m; ++i)
{
int nod1,nod2,cost;
scanf("%d %d %d", &nod1, &nod2, &cost);
g[nod1].push_back(make_pair(nod2,cost));
g[nod2].push_back(make_pair(nod1,cost));
}
}
void padure()
{
viz[1] = true;
for(vector<pair<int,int> >::iterator it = g[1].begin(); it != g[1].end(); ++it)
q.push(make_pair(-it->second,make_pair(1,it->first)));
int nod,tata,cost;
for(int i = 2; i <= n; ++i)
{
while(viz[q.top().second.second])
q.pop();
cost = - q.top().first;
tata = q.top().second.first;
nod = q.top().second.second;
viz[nod] = true;
q.pop();
v[i-1].first = tata;
v[i-1].second = nod;
total += cost;
for(vector<pair<int,int> >::iterator it = g[nod].begin(); it != g[nod].end(); ++it)
if(not viz[it->first])
q.push(make_pair(-it->second,make_pair(nod,it->first)));
}
}
void afish()
{
printf("%d\n%d\n", total, n-1);
for(int i = 1; i < n; ++i)
printf("%d %d\n", v[i].first, v[i].second);
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
citire();
padure();
afish();
return 0;
}