Pagini recente » Cod sursa (job #327184) | Cod sursa (job #2381423) | Cod sursa (job #2958260) | Cod sursa (job #2386926) | Cod sursa (job #2115900)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int MAXN =200041;
const int MAXM =400050;
int n,m;
int parent[MAXN];
typedef struct Muchie
{
int x,y,cost;
};
Muchie muchii[MAXM];
int cmp(const Muchie &e, const Muchie &f)
{
return e.cost < f.cost;
}
vector<Muchie> sol;
int suma;
void citire()
{
fin>>n>>m;
for(int i=0; i<m; i++)
fin>>muchii[i].x>>muchii[i].y>>muchii[i].cost;
}
int getRoot(int nod)
{
if(nod==parent[nod])
return nod;
return (parent[nod] = getRoot(parent[nod]));
}
bool areUnited(int e,int f)
{
return getRoot(e) == getRoot(f);
}
void unite(int e, int f)
{
parent[getRoot(e)] = getRoot(f);
}
int main()
{
citire();
for(int i=1; i<=n; i++)
parent[i]=i;
sort(muchii, muchii+m,cmp);
for(int i=0; i<m; i++)
if(!areUnited(muchii[i].x,muchii[i].y))
{
unite(muchii[i].x,muchii[i].y);
sol.push_back(muchii[i]);
suma += muchii[i].cost;
}
fout<<suma<<"\n";
fout<<sol.size()<<"\n";
for(Muchie muchie:sol)
fout<<muchie.y<<" "<<muchie.x<<"\n";
return 0;
}