Pagini recente » Cod sursa (job #1821685) | Cod sursa (job #2361420) | Cod sursa (job #2583624) | Cod sursa (job #3172549) | Cod sursa (job #1025637)
#include <fstream>
#include <algorithm>
#define Max(x,y) (x>y?x:y)
#define Min(x,y) (x<y?x:y)
using namespace std;
struct muchie
{
int x,y;
int Cost;
}U[400010],Muchii[400010];
int Nrm;
int CostAPM;
int N,M;
int CompC[400010];
bool Cmp(muchie A, muchie B)
{
return A.Cost<B.Cost;
}
void Citire_si_formare()
{
ifstream f("apm.in");
f>>N>>M;
for(int i=1;i<=M;++i)
{
f>>U[i].x>>U[i].y>>U[i].Cost;
}
for(int i=1;i<=N;++i)
CompC[i]=i;
f.close();
}
void Kruskal()
{
for(int i=1;i<=M;++i)
{
if(CompC[U[i].x]!=CompC[U[i].y])
{
Muchii[Nrm++]=U[i];
CostAPM+=U[i].Cost;
int Minim=Min(CompC[U[i].x],CompC[U[i].y]);
int Maxim=Max(CompC[U[i].x],CompC[U[i].y]);
for(int i=1;i<=N;++i)
if(CompC[i]==Maxim)
CompC[i]=Minim;
}
}
}
void Afisare()
{
ofstream fout("apm.out");
fout<<CostAPM<<"\n";
fout<<Nrm<<"\n";
for(int i=0;i<Nrm;++i)
fout<<Muchii[i].x<<" "<<Muchii[i].y<<"\n";
fout.close();
}
int main()
{
Citire_si_formare();
sort(U+1,U+M+1,Cmp);
Kruskal();
Afisare();
return 0;
}