Pagini recente » Cod sursa (job #1880306) | Clasament ss | Cod sursa (job #2053731) | Cod sursa (job #40568) | Cod sursa (job #1565945)
#include <cstdio>
#include <vector>
#include <queue>
#include <bitset>
#define pb push_back
#define mp make_pair
using namespace std;
const int nmx = 200002;
int n,m;
long long sum = 0;
vector <pair<int,int> > g[nmx],sol;
priority_queue <pair<int,pair<int,int> > > q;
bitset <nmx> v;
void input() {
scanf("%d %d", &n, &m);
int nod1,nod2,cost;
for(int i = 1; i <= m; ++i) {
scanf("%d %d %d", &nod1, &nod2, &cost);
g[nod1].pb(mp(nod2,cost));
g[nod2].pb(mp(nod1,cost));
}
}
void apm() {
v[1] = true;
for(vector<pair<int,int> >::iterator it = g[1].begin(); it != g[1].end(); ++it)
q.push(mp(-it->second,mp(it->first,1)));
int nod,cost,ant;
while(not q.empty()) {
nod = q.top().second.first;
cost = -q.top().first;
ant = q.top().second.second;
q.pop();
if(v[nod])
continue;
sum += cost;
v[nod] = true;
sol.push_back(mp(ant,nod));
for(vector<pair<int,int> >::iterator it = g[nod].begin(); it != g[nod].end(); ++it)
if(not v[it->first])
q.push(mp(-it->second,mp(it->first,nod)));
}
}
void output(){
printf("%lld\n", sum);
printf("%d\n", sol.size());
for(vector<pair<int,int> >::iterator it = sol.begin(); it != sol.end(); ++it)
printf("%d %d\n", it->first, it->second);
printf("\n");
}
int main() {
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
input();
apm();
output();
return 0;
}