Pagini recente » Cod sursa (job #240252) | Cod sursa (job #1331148) | Cod sursa (job #1464609) | Cod sursa (job #2340157) | Cod sursa (job #3003576)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int MMAX = 400001,
NMAX = 200001;
struct muchie
{
int x, y, cost;
};
int N, M, T[NMAX], nrm, ct;
muchie m[MMAX], MF[MMAX];
ifstream in("apm.in");
ofstream out("apm.out");
inline bool cmp(muchie A, muchie B)
{
return A.cost < B.cost;
}
void citire()
{
in >> N >> M;
for(int i = 1; i <= M; i++)
{
int a, b, c;
in >> a >> b >> c;
m[i].x = a;
m[i].y = b;
m[i].cost = c;
}
}
int Find(int x)
{
if(T[x] == 0)
return x;
else
return T[x] = Find(T[x]);
}
void Kruskal()
{
sort(m + 1, m + 1 + M, cmp);
for(int i = 1; i <= M; i++)
{
int rx, ry;
rx = Find(m[i].x);
ry = Find(m[i].y);
if(rx != ry)
{
T[rx] = ry;
nrm++;
MF[nrm] = m[i];
ct += m[i].cost;
}
}
}
void afisare()
{
out << ct << '\n';
for(int i = 1; i <= nrm; i++)
out << MF[i].x << " " << MF[i].y << '\n';
}
int main()
{
citire();
Kruskal();
afisare();
in.close();
out.close();
return 0;
}