Pagini recente » Cod sursa (job #2854979) | Statistici Bita Mihai-Valentin (Bita_Mihai_Valentin_322CB) | Cod sursa (job #895957) | Cod sursa (job #1570532) | Cod sursa (job #2702272)
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
#define pair pair<int, int>
int n;
int T[200001];
long long suma;
vector<pair> drum;
struct muchie {
int x, y, c;
} mch[400001];
bool csort(muchie a, muchie b) {
if (a.c < b.c)
return 1;
return 0;
}
int Radacina(int x) {
if (x == T[x]) return x;
else return T[x] = Radacina(T[x]);
}
void Uneste(int x, int y) {
if (T[x] > T[y]) T[x] = T[y];
else T[y] = T[x];
}
int main() {
int i, m, x, y, r1, r2;
ifstream f("apm.in");
f >> n >> m;
for (i = 1; i <= m; i++)
f >> mch[i].x >> mch[i].y >> mch[i].c;
f.close();
for (i = 1; i <= n; i++)
T[i] = i;
sort(mch + 1, mch + m + 1, csort);
for (i = 1; i <= m; i++) {
r1 = Radacina(mch[i].x), r2 = Radacina(mch[i].y);
if (r1 != r2) {
Uneste(mch[i].x, mch[i].y);
suma += mch[i].c;
drum.push_back({mch[i].x, mch[i].y});
}
}
ofstream g("apm.out");
g << suma << '\n';
g << drum.size() << '\n';
for (i = 0; i < drum.size(); i++)
g << drum[i].second << ' ' << drum[i].first << '\n';
g.close();
return 0;
}