Pagini recente » Cod sursa (job #406665) | Cod sursa (job #1026754) | Cod sursa (job #448673) | Cod sursa (job #2071310) | Cod sursa (job #1831044)
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<ctime>
using namespace std;
struct nodd{
int x;
int y;
int cost;
bool marcare;};
nodd v[400001];
int dad[200001];
bool sortare (nodd a, nodd b){
if (a.cost<b.cost){
return true;}
return false;}
int findd (int nod){
if (nod==dad[nod])
return nod;
else
dad[nod]=findd(dad[nod]);
return dad[nod];}
void unionn (int nod1, int nod2){
int a,b;
a=findd(nod1);
b=findd(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 (findd(v[i].x)!=findd(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;
}