Pagini recente » Cod sursa (job #832749) | Cod sursa (job #860435) | Cod sursa (job #295836) | Cod sursa (job #2979705) | Cod sursa (job #261898)
Cod sursa(job #261898)
#include<fstream.h>
#include<limits.h>
ofstream fout("apm.out");
long long n,m,e,u,c[1000],t[1000],p=1;
int a[1000][1000],q[1000];
void citire()
{ int z;
long x,y,i;
ifstream fin("apm.in");
fin>>n>>m;
for(i=1;i<=m;i++)
{ fin>>x>>y>>z;
a[x][y]=z;
a[y][x]=z;
}
fin.close();
}
int vf()
{ long min,x,i,j;
min=LONG_MAX;
for(i=1;i<=n;i++)
if(q[i]==1) for(j=1;j<=n;j++)
if(q[j]==0) if(a[i][j]<min&&a[i][j]!=0){ min=a[i][j];
x=i;
}
q[x]=0;
p++;
return x;
}
int main()
{ long i;
citire();
for(i=2;i<=n;i++)
{ q[i]=1;
c[i]=32000;
}
c[1]=0;
t[1]=-1;
while(p<=n)
{ if(p>1) u=vf();
else{ u=1;
p++;
}
for(i=1;i<=n;i++)
if(q[i]==1&&a[u][i]<c[i]&&a[u][i]!=0)
{ t[i]=u;
c[i]=a[u][i];
}
}
for(i=1;i<=n;i++)
if(t[i]==0) e+=a[1][i];
else if(t[i]>0) e+=a[i][t[i]];
fout<<e<<"\n"<<n-1<<"\n";
for(i=1;i<=n;i++)
if(t[i]==0) fout<<1<<" "<<i<<"\n";
else if(t[i]>0) fout<<i<<" "<<t[i]<<"\n";
fout.close();
return 0;
}