Pagini recente » Cod sursa (job #458649) | Cod sursa (job #2943951) | Cod sursa (job #79429) | Cod sursa (job #461793) | Cod sursa (job #382973)
Cod sursa(job #382973)
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 200001
#define M 400001
int rez[M],x[M],y[M],c[M],gr[N],n,m,ind[M],cost;
bool compar(int a,int b)
{
return c[a]<=c[b];
}
void citire()
{
freopen("apm.in","r",stdin);
freopen("apm.out","w",stdout);
scanf("%d%d",&n,&m);
for (int i=1; i<=m; ++i)
{
scanf("%d%d%d",&x[i],&y[i],&c[i]);
ind[i]=i;
}
sort(ind+1,ind+1+m,compar);
}
int grupa(int i)
{
if (i==gr[i])
return i;
gr[i]=grupa(gr[i]);
return gr[i];
}
void unesc(int i, int j)
{
gr[grupa(i)]=grupa(j);
}
void apm()
{
for (int i=1; i<=n; ++i)
gr[i]=i;
for (int i=1; i<=m; ++i)
{
if (grupa(x[ind[i]])!=grupa(y[ind[i]]))
{
unesc(x[ind[i]],y[ind[i]]);
rez[++rez[0]]=ind[i];
cost+=c[ind[i]];
}
}
}
void afis()
{
printf("%d\n%d\n",cost,rez[0]);
for (int i=1; i<=rez[0]; ++i)
printf("%d %d\n",x[rez[i]],y[rez[i]]);
}
int main()
{
citire();
apm();
afis();
return 0;
}