Pagini recente » Cod sursa (job #1422259) | Cod sursa (job #607974) | Cod sursa (job #1894753) | Cod sursa (job #2171151) | Cod sursa (job #1110842)
#include<fstream>
#define K 16
#define N 2013
#define INF 2000000
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
int c[N][N],t[K],n,m,k,p[K],sol[K],luat[K],ctot,cmin=INF;
void royfloyd()
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
}
void init()
{
fin>>n;
int i,j,x,y;
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
c[i][j]=c[j][i]=INF;
fin>>m>>k;
for(i=1;i<=k;i++)
fin>>t[i];
for(i=1;i<=m;i++)
fin>>x>>y,fin>>c[x][y];
}
void anal()
{
int ctot=c[1][t[sol[1]]];
for(int i=1;i<=k;i++)
ctot+=c[t[sol[i-1]]][t[sol[i]]];
cmin=min(cmin,ctot+c[t[sol[k]]][n]);
}
void bec(int p)
{
if(p>k)
anal();
else for(int i=1;i<=k;i++)
if(!luat[i])
{
luat[i]=1;
sol[p]=i;
bec(p+1);
luat[i]=0;
}
}
int main()
{
init();
royfloyd();
bec(1);
fout<<cmin;
return 0;
}