Pagini recente » Cod sursa (job #2387394) | Cod sursa (job #2137059) | Cod sursa (job #764315) | Cod sursa (job #571066) | Cod sursa (job #2974147)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("kruskal.in");
ofstream fout("kruskal.out");
int viz[101], t[101], n, m, apm, a[2][101], l;
struct muchii
{
int x, y, cost;
}v[5001];
bool mod(muchii a, muchii b)
{
return a.cost < b.cost;
}
int cauta(int x)
{
while (t[x] > 0)
x = t[x];
return x;
}
void kruskal();
int main()
{
int i;
fin >> n >> m;
for (i = 1; i <= m; i++)
fin >> v[i].x >> v[i].y >> v[i].cost;
kruskal();
for (i = 1; i <= l; i++)
fout << a[0][i] << " " << a[1][i] << "\n";
return 0;
}
void kruskal()
{
int i, x, y;
for (i = 1; i <= n; i++)
t[i] = -1;
sort(v + 1, v + m + 1, mod);
i = 0;
while (l < n - 1) {
x = cauta(v[++i].x);
y = cauta(v[i].y);
if (x != y) {
a[0][++l] = v[i].x;
a[1][l] = v[i].y;
if (-t[x] >= -t[y]) {
t[x] += t[y];
t[y] = x;
}
else {
t[y] += t[x];
t[x] = y;
}
apm += v[i].cost;
}
}
fout << apm << "\n";
}