Pagini recente » Cod sursa (job #272853) | Autentificare | Cod sursa (job #490780) | Cod sursa (job #544530) | Cod sursa (job #1596803)
#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<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=999999999;
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++)
a[i][j]=min(a[i][j],a[i][k2]+a[k2][j]);
s=0;
st[0]=1;
gen(1);
fout<<smin;
}