Pagini recente » Cod sursa (job #2258642) | Cod sursa (job #1315408) | Cod sursa (job #2773420) | Cod sursa (job #2602015) | Cod sursa (job #913722)
Cod sursa(job #913722)
#include <cstdio>
#include <queue>
#include <algorithm>
#define nMax 400010
using namespace std;
struct muchie{
int x;
int y;
int cost;
};
struct cmp{
bool operator()(const muchie &a, const muchie &b)const{
return a.cost < b.cost;
}
};
muchie a[nMax];
queue <int> q;
int componenta[nMax / 2];
int m;
int n;
int tata(int i){
if(componenta[i] == i){
return i;
}
return componenta[i] = tata(componenta[i]);
}
void citire(){
scanf("%d %d", &n, &m);
for(int i = 0; i < m; ++ i){
scanf("%d %d %d", &a[i].x, &a[i].y, &a[i].cost);
}
sort(a, a + m, cmp());
for(int i = 1; i <= n; ++ i){
componenta[i] = i;
}
}
void afis(){
printf("%d\n", n - 1);
while(!q.empty()){
printf("%d %d\n", a[q.front()].x, a[q.front()].y);
q.pop();
}
}
void apm(){
int s = 0;
int N = n - 1;
for(int i = 0; i < m; ++ i){
if(tata(a[i].x) != tata(a[i].y)){
componenta[tata(a[i].y)] = tata(a[i].x);
s += a[i].cost;
q.push(i);
N --;
if(!N){
printf("%d\n", s);
afis();
return;
}
}
}
}
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
citire();
apm();
return 0;
}