Pagini recente » Cod sursa (job #1367611) | Cod sursa (job #2022075) | Cod sursa (job #2423506) | Cod sursa (job #2022289) | Cod sursa (job #1261147)
#include <fstream>
#include <algorithm>
#define MMAX 400000
#define NMAX 200000
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int n, m, nr_muchii_arbore;
struct Muchie
{
int x, y;
double c;
};
Muchie G[MMAX];
int APM[NMAX], conex[MMAX];
double cost_APM;
void citire();
bool compara(Muchie a, Muchie b);
void rezolvare();
void afisare();
int main()
{
citire();
rezolvare();
afisare();
return 0;
}
void citire()
{
int i;
fin >> n >> m;
for(i = 0 ; i < m; ++i)
fin >> G[i].x >> G[i].y >> G[i].c;
for(i = 1; i <= n; ++i)
conex[i] = i;
sort(G, G+m, compara);
/*
for(i = 1 ;i<=m; ++i)
fout<<G[i].x<<" "<<G[i].y<<" "<<G[i].c<<"\n";
*/
}
bool compara(Muchie a, Muchie b)
{
return(a.c < b.c);
}
void rezolvare()
{
int i, j, comp_mica, comp_mare;
for(i = 0; i < m && nr_muchii_arbore < n ; i++)
{
if(conex[G[i].x] != conex[G[i].y])
{
if(conex[G[i].x] < conex[G[i].y])
{
comp_mica = conex[G[i].x];
comp_mare = conex[G[i].y];
}
else
{
comp_mica = conex[G[i].y];
comp_mare = conex[G[i].x];
}
APM[++nr_muchii_arbore] = i;
cost_APM = cost_APM + G[i].c;
for(j = 1; j <= n; ++j)
{
if(conex[j] == comp_mare)
conex[j] = comp_mica;
}
}
}
}
void afisare()
{
int i;
fout << cost_APM;
fout << '\n';
fout << nr_muchii_arbore;
fout << '\n';
for(i = 1; i <= n-1; ++i)
fout << G[APM[i]].x << ' ' << G[APM[i]].y << '\n';
}