Pagini recente » Cod sursa (job #57075) | Cod sursa (job #2329262) | Cod sursa (job #1465082) | Cod sursa (job #545449) | Cod sursa (job #2932223)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie
{
int cost;
int x, y;
};
vector<muchie> G;
vector<muchie> sol;
vector<int> tata;
int n, m, costmin;
//sau asa...
//vector < pair<int, pair<int, int> > > G;
void Citire()
{
fin >> n >> m;
G.resize(m+1);
for(int i = 1; i <= m; i++)
fin >> G[i].x >> G[i].y >> G[i].cost;
}
bool cmp(muchie a, muchie b)
{
return a.cost < b.cost;
}
int radacina(int node)
{
if(tata[node] == node) return node;
else return radacina(tata[node]);
}
void Kruskal()
{
int i;
sort(G.begin()+1, G.end(), cmp);
tata.resize(n+1);
for(i = 1; i <= n; i++)
tata[i] = i;
for(i = 1; i <= G.size(); i++)
{
if(radacina(G[i].x) != radacina(G[i].y))
{
sol.push_back(G[i]);
costmin += G[i].cost;
tata[radacina(G[i].y)] = radacina(G[i].x);
}
}
}
void Afisare()
{
int i;
fout << costmin << "\n";
fout << sol.size() << "\n";
for(i = 0; i < sol.size(); i++)
fout << sol[i].x << " " << sol[i].y << "\n";
}
int main()
{
Citire();
Kruskal();
Afisare();
return 0;
}