Pagini recente » Cod sursa (job #2910048) | Cod sursa (job #1758964) | Cod sursa (job #2105263) | Cod sursa (job #1981885) | Cod sursa (job #372969)
Cod sursa(job #372969)
#include<stdio.h>
#include<algorithm>
using namespace std;
struct muchie {
int x, y, cost;
};
muchie v[400009];
int bst,tata[200009],grad[200009],n,m;
char fol[400009];
int cmp (muchie a,muchie b)
{
return (a.cost<b.cost);
}
int gaseste(int p)
{
if (tata[p] != p)
tata[p] = gaseste(tata[p]);
return tata[p];
}
int uneste (int p1,int p2)
{
p1 = gaseste(p1);
p2 = gaseste(p2);
if (p1 == p2)
return 0;
if(grad[p1]<grad[p2])
{
tata[p1]=p2;
grad[p2]+=grad[p1];
}
else
{
tata[p2]=p1;
grad[p1]+=grad[p2];
}
return 1;
}
int main ()
{
int i;
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=m;i++)
scanf("%d%d%d",&v[i].x,&v[i].y,&v[i].cost);
sort(v+1,v+m+1,cmp);
for(i=1;i<=n;i++)
{
tata[i]=i;
grad[i]=1;
}
for(i=1;i<=m;i++)
if (uneste(v[i].x,v[i].y))
{
bst += v[i].cost;
fol[i] = 1;
}
printf("%d\n%d\n", bst, n-1);
for (i=1;i<=m;i++)
if(fol[i]==1)
printf("%d %d\n",v[i].x,v[i].y);
return 0;
}