Pagini recente » Cod sursa (job #321771) | Cod sursa (job #1505439) | Cod sursa (job #2697897) | Cod sursa (job #289994) | Cod sursa (job #756001)
Cod sursa(job #756001)
#include<fstream>
#include<algorithm>
#define nmax 400002
using namespace std;
int n,m;
int X[nmax],Y[nmax],C[nmax],GR[nmax],IND[nmax],a[nmax],r[nmax];
int rs[nmax],niv;
bool cmp(int i,int j){ return (C[i]<C[j]); }
int grupa(int i)
{
if(GR[i]==i)return i;
GR[i]=grupa(GR[i]);
return GR[i];
}
void join(int i,int j)
{
GR[grupa(i)]=grupa(j);
}
int main(void){
ifstream fin("apm.in");
ofstream fout("apm.out");
int i,j,costm=0;
fin>>n>>m;
for(i=1;i<=m;++i)
{
fin>>X[i]>>Y[i]>>C[i];
IND[i]=i;
}
for(i=1;i<=n;++i)GR[i]=i;
sort(IND+1,IND+m+1,cmp);
for(i=1;i<=m;++i)
{
if(grupa(X[IND[i]])!=grupa(Y[IND[i]]))
{
costm+=C[IND[i]];
join(X[IND[i]],Y[IND[i]]);
rs[++niv]=IND[i];
}
}
fout<<costm<<'\n'<<niv<<'\n';
for(i=1;i<=niv;++i)
fout<<X[rs[i]]<<' '<<Y[rs[i]]<<'\n';
return 0;
}