Pagini recente » Cod sursa (job #1181168) | Cod sursa (job #2144585) | Cod sursa (job #1957774) | Cod sursa (job #227747) | Cod sursa (job #2932224)
#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);
for(int i = 0; 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(), G.end(), cmp);
tata.resize(n+1);
for(i = 1; i <= n; i++)
tata[i] = i;
for(i = 0; 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;
}