Pagini recente » Cod sursa (job #1572121) | Cod sursa (job #1980509) | Cod sursa (job #3158027) | Diferente pentru concursuri-informatica intre reviziile 23 si 39 | Cod sursa (job #1749179)
#include<stdio.h>
#include<algorithm>
using namespace std;
FILE *in, *out;
struct muchie
{
int a, b, c;
};
muchie v[400000];
int conex[200001], h[200001];
bool compy(muchie a, muchie b)
{
return a.c < b.c;
}
int cap(int gay)
{
if(conex[gay] != gay) {
gay = cap(conex[gay]);
}
return gay;
}
void unes(int a, int b)
{
a = cap(a);
b = cap(b);
if(h[a] < h[b]) {
conex[a] = b;
} else {
if(h[a] > h[b]) {
conex[b] = a;
} else {
conex[b] = a;
h[a]++;
}
}
}
int main ()
{
int n, m, i;
in = fopen("apm.in", "r");
out = fopen("apm.out", "w");
fscanf(in, "%d%d", &n, &m);
for(i = 1; i <= n; i++) {
conex[i] = i;
h[i] = 1;
}
for(i = 0; i < m; i++) {
fscanf(in, "%d%d%d", &v[i].a, &v[i].b, &v[i].c);
}
sort(v, v + m, compy);
/*
for(i = 0; i < m; i++) {
printf("%d %d %d\n", v[i].a, v[i].b, v[i].c);
}
*/
long long s, t;
s = 0;
t = 0;
for(i = 0; i < m; i++) {
if(cap(v[i].a) != cap(v[i].b)) {
unes(v[i].a, v[i].b);
s = s + v[i].c;
t++;
v[i].c = 1001;
}
}
fprintf(out, "%lld\n%lld\n", s, t);
for(i = 0; i < m; i++) {
if(v[i].c == 1001) {
fprintf(out, "%d %d\n", v[i].a, v[i].b);
}
}
fclose(in);
fclose(out);
return 0;
}