Pagini recente » Cod sursa (job #1151144) | Cod sursa (job #1971187) | Cod sursa (job #1276802) | Cod sursa (job #2562869) | Cod sursa (job #2961133)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int N, M;
int costmin = 0, nrm = 0;
struct Muchie
{
int x, y, cost;
bool viz;
};
Muchie a[400000];
int t[200000];
void citire()
{
fin >> N >> M;
for (int i = 1; i <= M; i++)
{
fin >> a[i].x >> a[i].y >> a[i].cost;
}
}
bool cmp(Muchie a, Muchie b)
{
return a.cost < b.cost;
}
void Union(int a, int b)
{
t[a] = b;
}
int Find(int x)
{
int rad = x, y;
while (t[rad] != 0)
{
rad = t[rad];
}
while (x != rad)
{
y = t[x];
t[x] = rad;
x = y;
}
return rad;
}
void kruskal()
{
int nrcc = N;
sort(a + 1, a + M + 1, cmp);
int radx, rady;
for (int i = 1; i <= M && nrcc > 1; i++)
{
radx = Find(a[i].x);
rady = Find(a[i].y);
if (radx != rady)
{
Union(radx, rady);
nrm++;
nrcc -= 1;
costmin += a[i].cost;
a[i].viz = true;
}
}
}
void afisare()
{
fout << costmin << '\n';
fout << nrm << '\n';
for (int i = 1; i <= M; i++)
{
if (a[i].viz == true)
{
fout << a[i].x << ' ' << a[i].y << '\n';
}
}
}
int main()
{
citire();
kruskal();
afisare();
fin.close();
fout.close();
return 0;
}