Pagini recente » Cod sursa (job #2255213) | Cod sursa (job #430798) | Cod sursa (job #1250221) | Cod sursa (job #577283) | Cod sursa (job #2998648)
#include <fstream>
#include <vector>
#include<algorithm>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
int sum,C[200000],l;
int n,m;
struct muchie
{
int x,y,c;
}muchii[200000],rez[200000];
int comp(muchie a,muchie b)
{
return a.c<b.c;
}
int find(int nod)
{
if(nod==C[nod])
return nod;
return C[nod]=find(C[nod]);
}
void unesc(int nod1,int nod2)
{
if(C[nod1]<C[nod2])
C[nod2]=C[nod1];
else
C[nod1]=C[nod2];
}
void kruskal()
{
for(int i=1;i<=m;++i)
{
int c1=find(muchii[i].x);
int c2=find(muchii[i].y);
if(c1!=c2)
{
unesc(c1,c2);
sum+=muchii[i].c;
rez[++l]=muchii[i];
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;++i)
cin>>muchii[i].x>>muchii[i].y>>muchii[i].c;
for(int i=1;i<=n;++i)
C[i]=i;
sort(muchii+1,muchii+m+1,comp);
kruskal();
cout<<sum<<l<<endl;
for(int i=1;i<=l;++i)
cout<<rez[i].x<<" "<<rez[i].y<<endl;
}