Pagini recente » Cod sursa (job #635966) | Cod sursa (job #1748255) | Rating cont de incercari (63842) | Cod sursa (job #692735) | Cod sursa (job #1374885)
#include <cstdio>
using namespace std;
int a[2005][2005],x,y,n,m,k,sat[2001],i,q,j,c,Min=9999999999,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[j][q]<a[i][j] && a[i][q]!=999999 && a[j][q]!=999999 ) a[i][j]=a[i][q]+a[j][q];
}
}
}
back(1);
printf("%d",Min);
return 0;
}