Pagini recente » Cod sursa (job #37184) | Cod sursa (job #1071942) | Cod sursa (job #2981770) | Cod sursa (job #2099011) | Cod sursa (job #2857404)
#include<algorithm>
#include<fstream>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
int sef[200001];
struct ura{
int n1,n2,c;
bool viz;
}v[400001];
int sefsuprem(int nod){
if(sef[nod]==nod)
return nod;
else
return sef[nod]=sefsuprem(sef[nod]);
}
void unire(int x,int y){
int sef1=sefsuprem(x);
int sef2=sefsuprem(y);
sef[sef1]=sef2;
}
bool cmp(ura a, ura b){
if(a.c<b.c)
return true;
return false;
}
int main(){
int n,m,i,cost=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>v[i].n1>>v[i].n2>>v[i].c;
for(int i=1;i<=n;i++){
sef[i]=i;
}
sort(v+1,v+m+1,cmp);
int cate=0;
for(int i=1;i<=m;i++){
if(sefsuprem(v[i].n1)!=sefsuprem(v[i].n2)){
unire(v[i].n1,v[i].n2);
cost+=v[i].c;
v[i].viz=1;
cate++;
}
}
cout<<cost<<'\n'<<cate<<'\n';
for(int i=1;i<=m;i++)
if(v[i].viz==1)
cout<<v[i].n1<<" "<<v[i].n2<<'\n';
return 0;
}