Pagini recente » Cod sursa (job #772460) | Cod sursa (job #75242) | Cod sursa (job #3273816) | Cod sursa (job #879216) | Cod sursa (job #3143561)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int tata[200001], h[200001], n, m;
struct muchie {
int x, y, c;
}v[400001], afis[400001];
int radacina(int x) {
if (tata[x] == 0)
return x;
else {
int tmp = radacina(tata[x]);
tata[x] = tmp;
return tmp;
}
}
void unire(int x, int y) {
int rx = radacina(x), ry = radacina(y);
if (rx != ry) {
if (h[rx] > h[ry])
tata[ry] = rx;
else {
tata[rx] = ry;
if (h[rx] == h[ry])
h[ry]++;
}
}
}
bool cmp(muchie a, muchie b) {
return a.c < b.c;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= m; i++)
fin >> v[i].x >> v[i].y >> v[i].c;
sort(v + 1, v + m + 1, cmp);
int s = 0, nr = 0;
for (int i = 1; i <= m && nr < n - 1; i++) {
int tmp1 = radacina(v[i].x), tmp2 = radacina(v[i].y);
if (tmp1 != tmp2) {
s += v[i].c;
afis[++nr] = v[i];
unire(tmp1, tmp2);
}
}
fout << s << "\n" << nr << "\n";
for (int i = 1; i <= nr; i++)
fout << afis[i].x << " " << afis[i].y << "\n";
return 0;
}