Pagini recente » Cod sursa (job #866878) | Cod sursa (job #2667416) | Cod sursa (job #2895971) | Cod sursa (job #1627041) | Cod sursa (job #2176138)
#include <iostream>
#include <fstream>
#include <list>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n,m;
struct muchii
{
int e1;
int e2;
int cost;
}edge[500000];
bool cmp(muchii x,muchii y)
{
return (x.cost<y.cost);
}
int arb[250000];
int ctotal,sol;
bool care[500001];
void kruskal()
{
sort(edge+1,edge+m+1,cmp);
int i,j;
i=1,j=1;
while(i<=n-1)
{
int m1=edge[j].e1;
int m2=edge[j].e2;
if(arb[m1]!=arb[m2])
{
ctotal+=edge[j].cost;
int val=arb[m1];
for(int k=1;k<=n;++k)
if(arb[k]==val)
arb[k]=arb[m2];
i++;
sol++;
care[j]=1;
}
j++;
}
}
int main()
{f>>n>>m;
for(int i=1;i<=m;++i)
f>>edge[i].e1>>edge[i].e2>>edge[i].cost;
for(int i=1;i<=n;++i)
arb[i]=i;
kruskal();
g<<ctotal<<endl<<sol<<endl;
for(int i=1;i<=m;++i)
if(care[i])
g<<edge[i].e1<<' '<<edge[i].e2<<endl;
return 0;
}