Pagini recente » Cod sursa (job #2175560) | Cod sursa (job #2156978) | Cod sursa (job #343100) | Cod sursa (job #2537039) | Cod sursa (job #698486)
Cod sursa(job #698486)
#include<cstdio>
#include<algorithm>
#define maxn 2005
using namespace std;
int n,m,p;
int minim=1<<30;
int st[17];
int cost[maxn][maxn];
void read()
{
freopen("ubuntzei.in","r",stdin);
scanf("%d %d",&n,&m);
scanf("%d",&p);
for(int i=1;i<=p;i++)
scanf("%d",&st[i]);
int x,y,z;
for(int i=1;i<=m;i++)
{
scanf("%d %d %d",&x,&y,&z);
cost[x][y]=z;
cost[y][x]=z;
}
}
void royfloyd()
{
int k,i,j;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if( (cost[i][k]!=0)&&(cost[k][j]!=0)&&(cost[i][j]>cost[i][k]+cost[k][j]||cost[i][j]==0) && i!=j)
cost[i][j]=cost[i][k]+cost[k][j];
}
void solve()
{
int d=0;
sort(st+1,st+p+1);
do
{
d=0;
d+=cost[1][st[1]];
d+=cost[st[p]][n];
for(int i=2;i<=p;i++)
d+=cost[i-1][i];
if(d<minim) minim=d;
}while(next_permutation(st+1,st+p+1));
}
int main()
{
freopen("ubuntzei.out","w",stdout);
read();
royfloyd();
solve();
printf("%d",minim);
}