Pagini recente » Cod sursa (job #1343833) | Cod sursa (job #2251297) | Cod sursa (job #368332) | Cod sursa (job #2889850) | Cod sursa (job #1596793)
#include <iostream>
#include <fstream>
#define nmax 2016
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
long a[nmax][nmax],s,smin=999999999;
int n,k,st[20],viz[20],u[20];
void gen(int p)
{int i;
if(p==k+1){ s+=a[st[p-1]][n];
if(s<smin)smin=s;
s-=a[st[p]][n];
}
else for(i=1;i<=k;i++)
if(!viz[i])
if(s+a[st[p-1]][u[i]]<smin)
{st[p]=u[i]; viz[i]=1;
s+=a[st[p-1]][u[i]];
gen(p+1);
s-=a[st[p-1]][u[i]];
viz[i]=0;
}
}
int main()
{int m,i,j,k2,x,y;
long z;
fin>>n>>m;
fin>>k;
for(i=1;i<=k;i++)fin>>u[i];
for(i=1;i<=m;i++)
{fin>>x>>y>>z;
a[x][y]=a[y][x]=z;
}
for(k2=1;k2<=n;k2++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(k2!=i && a[k2][j] && a[j][i] && (!a[k2][i] || a[k2][i]>a[k2][j]+a[j][i]))
a[k2][i]=a[k2][j]+a[j][i];
s=0;
st[0]=1;
gen(1);
fout<<smin;
}