Pagini recente » Cod sursa (job #3219300) | Cod sursa (job #2803030) | Cod sursa (job #1668550) | Cod sursa (job #1109798) | Cod sursa (job #2131954)
#include <bits/stdc++.h>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int nMax = 200005;
struct Val{
int x, y, c;
};
Val a[2 * nMax];
int t[nMax];
pair <int, int> re[2 * nMax];
inline void Union(int x, int y) {
t[x] = y;
}
inline int Find(int x) {
if(t[x] != x) {
t[x] = Find(t[x]);
}
return t[x];
}
inline bool cmp(const Val &A, const Val &B) {
return A.c < B.c;
}
int main()
{
int n, m;
f >> n >> m;
for(int i = 1; i <= m; i++) {
f >> a[i].x >> a[i].y >> a[i].c;
}
sort(a + 1, a + m + 1, cmp);
for(int i = 1; i <= n; i++) {
t[i] = i;
}
int ans = 0, cnt = 0;
for(int i = 1; i <= m; i++) {
int fi = Find(a[i].x);
int se = Find(a[i].y);
if(fi == se) {
continue;
}
cnt++;
Union(fi, se);
ans += a[i].c;
re[cnt] = {a[i].x, a[i].y};
}
g << ans << "\n";
g << cnt << "\n";
for(int i = 1; i <= cnt; i++) {
g << re[i].first << " " << re[i].second << "\n";
}
return 0;
}