Pagini recente » Cod sursa (job #816519) | Cod sursa (job #1850163) | Cod sursa (job #3196969) | Cod sursa (job #2115441) | Cod sursa (job #3286299)
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 200001;
struct muchie
{
int i, j, c;
};
muchie M[400001];
int n, m, cost = 0,CC[NMAX],NrM[NMAX],nm=0;
ifstream f("apm.in");
ofstream g("apm.out");
void citire() {
f >> n >> m;
for (int k = 1; k <= m; k++) {
f >> M[k].i >> M[k].j >> M[k].c;
}
}
void afis() {
g << cost << '\n';
g << nm << '\n';
for (int i = 1; i <= nm; i++) {
int k = NrM[i];
g << M[k].i << ' ' << M[k].j << '\n';
}
}
bool comp(const muchie &a, const muchie &b) {
return a.c < b.c;
}
int Find(int i) {
if (CC[i] == 0)
return i;
return CC[i] = Find(CC[i]);
}
void Kruskal() {
sort(M + 1, M + m + 1, comp);
for (int i = 1; i <= m; i++) {
int ci = Find(M[i].i);
int cj = Find(M[i].j);
if (ci != cj) {
cost += M[i].c;
CC[ci] = cj;
NrM[++nm] = i;
if (nm == n - 1)
break;
}
}
}
int main() {
citire();
Kruskal();
afis();
return 0;
}