Pagini recente » Cod sursa (job #1249772) | Cod sursa (job #652490) | Cod sursa (job #1765704) | Cod sursa (job #1276715) | Cod sursa (job #3124424)
#include <bits/stdc++.h>
using namespace std;
const int v_len = 200001;
#define TII tuple<int, int, int>
ifstream fin("apm.in");
ofstream fout("apm.out");
int tree[v_len], treeSize[v_len];
int get_root(int node)
{
while (tree[node] != 0)
node = tree[node];
return node;
}
bool join(int node1, int node2)
{
int par1 = get_root(node1);
int par2 = get_root(node2);
if (par1 == par2)
return false;
if (treeSize[par1] >= treeSize[par2])
treeSize[par1] += treeSize[par2], tree[par2] = par1;
else
treeSize[par2] += treeSize[par1], tree[par1] = par2;
return true;
}
int main()
{
int n, m;
fin >> n >> m;
priority_queue<TII, vector<TII>, greater<TII>> best;
for (int i = 1; i <= m; i++)
{
int x, y, cost;
fin >> x >> y >> cost;
best.push(make_tuple(cost, x, y));
}
vector<pair<int, int>> sol;
int total = 0;
while (!best.empty())
{
TII curr = best.top();
best.pop();
int x = get<1>(curr), y = get<2>(curr), cost = get<0>(curr);
if (join(x, y))
total += cost, sol.push_back(make_pair(x, y));
}
fout << total << "\n"
<< sol.size() << "\n";
for (auto obj : sol)
fout << obj.first << " " << obj.second << "\n";
return 0;
}