Pagini recente » Cod sursa (job #1088755) | Cod sursa (job #2135916) | Cod sursa (job #2223179) | Cod sursa (job #2794422) | Cod sursa (job #1650527)
#include <cstdio>
#include <bitset>
#include <vector>
#include <queue>
using namespace std;
const int nmx = 200002;
int n,m,sum;
vector <pair<int,int> > g[nmx],ans;
bitset <nmx> viz;
void citire(){
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].push_back(make_pair(nod2,cost));
g[nod2].push_back(make_pair(nod1,cost));
}
}
void apm(){
priority_queue <pair<int,pair<int,int> > > q;
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(it->first,1)));
int t = 1;
while(t < n){
int nod = q.top().second.first;
int cost = -q.top().first;
int tata = q.top().second.second;
q.pop();
if(viz[nod])
continue;
viz[nod] = true;
sum += cost;
++ t;
ans.push_back(make_pair(nod,tata));
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(it->first,nod)));
}
}
void afish(){
printf("%d\n", sum);
printf("%d\n", n - 1);
for(vector<pair<int,int> >::iterator it = ans.begin(); it != ans.end(); ++it)
printf("%d %d\n", it->first, it->second);
}
int main(){
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
citire();
apm();
afish();
return 0;
}