Pagini recente » Cod sursa (job #1825539) | Cod sursa (job #141506) | Cod sursa (job #872656) | Cod sursa (job #2601211) | Cod sursa (job #2847595)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie
{
int x;
int y;
int cost;
};
int n, m, sol;
const int NMAX = 200005;
muchie e[2*NMAX];
int t[NMAX];
bool viz[NMAX];
void Union(int x, int y)
{
t[x] = y;
}
int Find(int x)
{
int radacina = x, aux;
while(t[radacina] > 0)
{
radacina = t[radacina];
}
while(t[x] > 0)
{
aux = t[x];
t[x] = radacina;
x = aux;
}
return radacina;
}
void citire()
{
int x, y, z;
fin >> n >> m;
for(int i = 1; i <= m; i++)
{
fin >> x >> y >> z;
e[i].x = x;
e[i].y = y;
e[i].cost = z;
}
}
bool cmp(muchie e1, muchie e2)
{
return e1.cost < e2.cost;
}
void apm()
{
int cont = 0;
sort(e + 1, e + m + 1, cmp);
for(int i = 1; i <= m; i++)
{
int r1 = Find(e[i].x);
int r2 = Find(e[i].y);
if(r1 != r2)
{
sol += e[i].cost;
Union(r1, r2);
cont++;
viz[i] = true;
}
}
fout << sol << "\n" << cont << "\n";
for(int i = 1; i <= m; i++)
{
if(viz[i])
{
fout << e[i].x << " " << e[i].y << "\n";
}
}
}
int main()
{
citire();
apm();
return 0;
}