Pagini recente » Cod sursa (job #451048) | Cod sursa (job #2240393) | Cod sursa (job #2317972) | Cod sursa (job #169142) | Cod sursa (job #1374917)
#include <cstdio>
using namespace std;
int a[2005][2005],x,y,n,m,k,sat[2001],i,q,j,c,Min=999999,sol[2005],sum;
bool used[2005];
void back(int lvl)
{
if(lvl>k)
{
sol[0]=0;
sat[0]=1;
sum=0;
for(i=1;i<=k;++i)
{
sum+=a[sat[sol[i-1]]][sat[sol[i]]];
}
sum+=a[sat[sol[k]]][n];
if(sum<Min) Min=sum;
return ;
}
for(i=1; i<=k; ++i)
{
if(!used[i])
{
used[i]=1;
sol[lvl]=i;
back(lvl+1);
used[i]=0;
}
}
return;
}
int main()
{
freopen("ubuntzei.in","r",stdin);
freopen("ubuntzei.out","w",stdout);
scanf("%d %d",&n,&m);
scanf("%d",&k);
for(i=1; i<=k; ++i)
{
scanf("%d",&sat[i]);
}
for(i=1; i<=n; ++i)
{
for(j=1; j<=n; ++j)
a[i][j]=999999;
}
for(i=1; i<=m; ++i)
{
scanf("%d %d %d",&x,&y,&c);
a[y][x]=a[x][y]=c;
}
for(i=1; i<=n; ++i)
{
for(j=1; j<=n; ++j)
{
for(q=1; q<=n; ++q)
{
if(a[i][q]+a[q][j]<a[i][j] && a[i][q]!=999999 && a[q][j]!=999999) a[i][j]=a[i][q]+a[q][j],a[j][i]=a[i][q]+a[q][j];
}
}
}
back(1);
printf("%d",Min);
return 0;
}