Pagini recente » Cod sursa (job #2887218) | Cod sursa (job #317866) | Cod sursa (job #2893892) | Cod sursa (job #1267764) | Cod sursa (job #665540)
Cod sursa(job #665540)
#include <cstdio>
int M[42][42],v[10],d[10];
int main()
{
int n,t,m,i,j,a,b,c,sol=0,x[10];
freopen("subarbore.in","r",stdin);
freopen("subarbore.out","w",stdout);
scanf("%d %d",&n,&m);
for (i=1;i<=m;++i)
{scanf("%d %d %d",&a,&b,&c);M[a][b]=M[b][a]=c;}
for (t=1;t<=n;++t)
for (i=1;i<=n;++i)
if (M[t][i]!=0)
for (j=1;j<=n;++j)
if (M[i][t] && M[t][j] && (M[i][j] > M[i][t] + M[t][j] || !M[i][j]) && i != j)
M[i][j]=M[i][t]+M[t][j];
scanf("%d",&t);
for (i=1;i<=t;++i)
scanf("%d",&x[i]);
v[1]=1;
d[1]=0;
for (i=2;i<=t;++i)
d[i]=M[x[1]][x[i]];
for (m=1;m<t;++m)
{
a=999999999;
for (i=1;i<=t;++i)
if ((d[i]) && (d[i]<a)) a=d[i],b=i;
sol+=a;
v[b]=1;d[b]=0;
for (i=1;i<=t;++i)
if (!v[i])
if ((d[i]==0) || (d[i]>M[x[b]][x[i]]))
d[i]=M[x[b]][x[i]];
}
printf("%d\n",sol);
return 0;
}