Pagini recente » Cod sursa (job #3277433) | Cod sursa (job #1443104) | Cod sursa (job #3198726) | Cod sursa (job #2543178) | Cod sursa (job #2940178)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m, ct, sel, parent[200001], h[200001];
struct Edge {
int x, y, c;
} e[400001];
vector<Edge> v;
bool comp(Edge e1, Edge e2){
return (e1.c < e2.c);
}
int root(int x){
if(parent[x] == 0) return x;
return root(parent[x]);
}
int main() {
fin >> n >> m;
for (int i=1; i<=m; i++) {
fin >> e[i].x >> e[i].y >> e[i].c;
}
sort(e+1, e+m+1, comp);
for(int i=1; i<=m and sel<n-1; i++){
int r1 = root(e[i].x);
int r2 = root(e[i].y);
if(r1 != r2){
sel++;
if(h[r1] < h[r2]) parent[r1] = r2;
else if(h[r1] == h[r2]) parent[r1] = r2, h[r2] += 1;
else parent[r2] = r1;
ct += e[i].c;
v.push_back(e[i]);
}
}
fout<<ct<<'\n'<<v.size()<<'\n';
for(auto e: v) fout<<e.x<<" "<<e.y<<'\n';
return 0;
}