Pagini recente » Cod sursa (job #2262029) | Cod sursa (job #2953005) | Cod sursa (job #1697148) | Cod sursa (job #1880319) | Cod sursa (job #3258808)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int NMAX = 200001;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie
{
int i, j, c;
};
int n, m, cost, CC[NMAX];
vector<muchie> M;
vector<pair<int, int>> sol;
inline bool cmp(const muchie& a, const muchie& b)
{
return a.c < b.c;
}
void citire()
{
int i, j, c;
fin >> n >> m;
for(int k = 1; k <= m; ++k)
{
fin >> i >> j >> c;
M.push_back({i, j, c});
}
}
void afis()
{
fout << cost << '\n' << n - 1 << '\n';
for(const auto& muc : sol)
{
fout << muc.first << ' ' << muc.second << '\n';
}
}
int Find(int i)
{
if(!CC[i]) return i;
return CC[i] = Find(CC[i]);
}
void Kruskal()
{
int ind = 0;
sort(M.begin(), M.end(), cmp);
for(const auto& muc : M)
{
int ci = Find(muc.i), cj = Find(muc.j);
if(ci != cj)
{
cost += muc.c;
CC[ci] = cj;
sol.push_back({muc.i, muc.j});
if(++ind == n - 1) return;
}
}
}
int main()
{
citire();
Kruskal();
afis();
return 0;
}