Pagini recente » Cod sursa (job #1929372) | Cod sursa (job #161019) | Cod sursa (job #473914) | Cod sursa (job #2309042) | Cod sursa (job #1970157)
#include <bits/stdc++.h>
using namespace std;
FILE *fin = fopen("apm.in", "r");
FILE *fout = fopen("apm.out", "w");
const int maxm = 400000;
const int maxn = 200000;
struct much {
int x, y, c;
const bool operator < (const much &a) const {
return c < a.c;
};
};
int n, m;
much v[maxm + 1];
int tata[maxm + 1];
inline int find1(int x) {
int x1 = x;
while(x1 != tata[x1])
x1 = tata[x1];
while(x != tata[x]) {
int cx = tata[x];
tata[x] = x1;
x = cx;
}
return x1;
}
inline void union1(int x, int y) {
tata[find1(x)] = find1(y);
}
vector <int> sol;
int main() {
fscanf(fin, "%d%d", &n, &m);
for(int i = 1;i <= m;i++)
tata[i] = i;
for(int i = 1;i <= m;i++) {
fscanf(fin, "%d%d%d", &v[i].x, &v[i].y, &v[i].c);
}
sort(v + 1, v + m + 1);
int costarb = 0;
for(int i = 1;i <= m;i++) {
int x1 = find1(v[i].x), y1 = find1(v[i].y);
if(x1 != y1) {
union1(x1, y1);
costarb += v[i].c;
sol.push_back(i);
}
}
fprintf(fout, "%d\n%d\n", costarb, sol.size());
for(auto &x : sol) {
fprintf(fout, "%d %d\n", v[x].x, v[x].y);
}
fclose(fin);
fclose(fout);
return 0;
}