Pagini recente » Cod sursa (job #1230583) | Cod sursa (job #1646652) | Cod sursa (job #2425548) | Cod sursa (job #1253301) | Cod sursa (job #2039155)
#include <bits/stdc++.h>
#define DM 400005
#define DN 200005
#define pb push_back
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct mch{
int nx,ny,cst;
};
int p[DN],arcLeft,n,m,a,b,c,sum;
vector<mch>ans;
mch v[DM];
bool cmp(mch a,mch b){
return (a.cst<b.cst);
}
int root(int x){
if(x==p[x])
return x;
return (p[x]=root(p[x]));
}
void _merge(int x,int y){
p[root(y)]=root(x);
}
int main()
{
fin>>n>>m;
arcLeft = m;
for(int i=1;i<=m;++i){
fin>>a>>b>>c;
v[i]={a,b,c};
}
for(int i=1;i<=n;++i)
p[i]=i;
sort(v+1,v+m+1,cmp);
for(int i=1;i<=m;++i){
int a=v[i].nx,b=v[i].ny,c=v[i].cst;
if(root(a)!=root(b)){
_merge(a,b);
ans.pb(v[i]);
arcLeft--;
sum+=c;
}
if(!arcLeft)
break;
}
fout<<sum<<'\n'<<ans.size()<<'\n';
for(auto i:ans)
fout<<i.nx<<" "<<i.ny<<'\n';
return 0;
}