Pagini recente » Cod sursa (job #911941) | Cod sursa (job #487840) | Cod sursa (job #247472) | Cod sursa (job #193324) | Cod sursa (job #1533536)
#include <fstream>
#include <algorithm>
#include <utility>
#include <vector>
#include <iostream>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int MAX = 2e5 + 5;
pair<int, pair<int, int>> edges[MAX];
vector<pair<int, int>> sol;
int n, m, total_cost;
int father[MAX];
int find_root(int a) {
if (father[a] != a)
father[a] = find_root(father[a]);
return father[a];
}
void unite(int a, int b) {
father[find_root(a)] = find_root(b);
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
father[i] = i;
for (int i = 0; i < m; i++)
fin >> edges[i].second.first >> edges[i].second.second >> edges[i].first;
sort(edges, edges + m);
for (int i = 0; i < m; i++) {
int cost = edges[i].first, a = edges[i].second.first, b = edges[i].second.second;
if (find_root(a) != find_root(b)) {
unite(a, b);
sol.push_back(edges[i].second);
total_cost += cost;
}
}
fout << total_cost << '\n' << sol.size() << '\n';
for (auto iter: sol)
fout << iter.first << ' ' << iter.second << '\n';
return 0;
}