Pagini recente » Cod sursa (job #232468) | Cod sursa (job #2827052) | Cod sursa (job #1334024) | Cod sursa (job #1882607) | Cod sursa (job #2195756)
#include <bits/stdc++.h>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct edge{
int x, y, c;
};
int n, m, x, y, c, vf, dad[200100], rs;
edge E[400100], sol[200100];
int find(int x){
return x == dad[x] ? x : dad[x] = find(dad[x]);
}
void join(int x, int y){
dad[find(x)] = find(y);
}
bool cmp(const edge &a, const edge &b){
return a.c < b.c;
}
int main(){
in >> n >> m;
for(int i = 1; i <= m; i++){
in >> x >> y >> c;
E[i] = {x, y, c};
}
for(int i = 1; i <= n; i++)
dad[i] = i;
sort(E + 1, E + m + 1, cmp);
for(int i = 1; i <= m; i++){
x = E[i].x;
y = E[i].y;
if(find(x) != find(y)){
rs += E[i].c;
sol[++vf] = E[i];
join(x, y);
}
}
out << rs << '\n' << n - 1;
for(int i = 1; i < n; i++)
out << '\n' << sol[i].x << ' ' << sol[i].y;
return 0;
}