Pagini recente » Cod sursa (job #3206328) | Cod sursa (job #704502) | Cod sursa (job #1233607) | Cod sursa (job #2720339) | Cod sursa (job #1623388)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
using namespace std;
#define MAX_N 200001
#define MAX_M 400001
#define INF 0x3f3f
ifstream fin("apm.in");
ofstream fout("apm.out");
int nrm;
struct muchie
{
int x, y, c;
} e[MAX_N], sol[MAX_N];
int N, M, T[MAX_N], cost;
void citire()
{
fin >> N >> M;
for (int i = 1; i <= M; i++)
{
fin >> e[i].x >> e[i].y >> e[i].c;
}
}
void reuneste(int i, int j)
{
int k;
i = T[i];
j = T[j];
if (i == j) return;
for (k = 1; k <= N; k++)
if (T[k] == i) T[k] = j;
}
int comp_muchie(const void *i, const void *j)
{
return ((int *) i)[2] - ((int *)j)[2];
}
void kruskal(void)
{
int i, j, k, c;
qsort(e, M, sizeof(e[0]), comp_muchie);
for (i = 1; i <= N; i++) T[i] = i;
for (k = 0; k < M; k++)
{
i = e[k].x;
j = e[k].y;
c = e[k].c;
if(T[i] == T[j]) continue;
reuneste(i, j);
cost += c;
nrm++;
sol[nrm].x = i;
sol[nrm].y = j;
sol[nrm].c = c;
}
fout << nrm << "\n" << cost << "\n";
for (i = 1; i <= nrm; i++) {
fout << sol[i].x << " " << sol[i].y << "\n";
}
}
int main()
{
citire();
kruskal();
return 0;
}