Pagini recente » Cod sursa (job #546769) | Cod sursa (job #2428724) | Cod sursa (job #2092969) | Cod sursa (job #1113918) | Cod sursa (job #696067)
Cod sursa(job #696067)
#include <fstream>
#include <algorithm>
#define M 400010
#define N 200010
using namespace std;
int t[N],i,n,m,cost,k,apm[N],x[M],y[M],c[M],ind[M];
bool cmp(int a,int b)
{
return c[a]<c[b];
}
int grupa(int nod)
{
if(t[nod]==nod) return nod;
t[nod]=grupa(t[nod]);
return t[nod];
}
void reunite(int a, int b)
{
int s=grupa(a);
t[s]=grupa(b);
}
int main()
{
ifstream fi("apm.in");
ofstream fo("apm.out");
fi>>n>>m;
for(i=1;i<=n;i++) t[i]=i;
for(i=1;i<=m;i++)
{
fi>>x[i]>>y[i]>>c[i];
ind[i]=i;
}
sort(ind+1,ind+m+1,cmp);
for(i=1,k=1;i<m and k<n;i++)
if(grupa(x[ind[i]])!=grupa(y[ind[i]]))
{
reunite(x[ind[i]],y[ind[i]]);
cost+=c[ind[i]];
apm[k]=ind[i];
k++;
}
fo<<cost<<"\n";
for(i=1;i<k;i++) fo<<x[apm[i]]<<" "<<y[apm[i]]<<"\n";
return 0;
}