Pagini recente » Cod sursa (job #803808) | Cod sursa (job #2479279) | Cod sursa (job #196976) | Cod sursa (job #1201114) | Cod sursa (job #1830459)
#include<stdio.h>
#include<algorithm>
#include<ctime>
#include<cstdlib>
using namespace std;
struct bine { int x ; int y ; int cost ; bool marcare;};
bine v[400001];
int dad[200001];
bool sortare ( bine a , bine b ){
if(a.cost<b.cost)
return 1;
return 0;
}
int finnd ( int nod){
if(nod==dad[nod])
return nod;
else
dad[nod]=finnd(dad[nod]);
return dad[nod];
}
void unionn ( int nod1 , int nod2){
int a,b;
a=finnd(nod1);
b=finnd(nod2);
if(a!=b)
if(rand()%2==0)
dad[a]=b;
else
dad[b]=a;
}
int main(){
int n,m,i,s,nrmuchii;
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
srand(time(0));
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].cost);
for(i=1;i<=n;i++)
dad[i]=i;
sort(v+1,v+m+1,sortare);
nrmuchii=0;
s=0;
for(i=1;i<=m&&nrmuchii<n-1;i++){
if(finnd(v[i].x)!=finnd(v[i].y)){
unionn(v[i].x,v[i].y);
s=s+v[i].cost;
nrmuchii++;
v[i].marcare=1;
}
}
printf("%d\n%d\n",s,nrmuchii);
for(i=1;i<=m;i++)
if(v[i].marcare==1)
printf("%d %d\n",v[i].x,v[i].y);
return 0;
}