Pagini recente » Cod sursa (job #1421613) | Cod sursa (job #2120891) | Cod sursa (job #273601) | Cod sursa (job #1387191) | Cod sursa (job #1129401)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
int n,m,k,i,j,x,kk[17],t[2001],s=1000000000,ka[17][17],c[17];
void bk(int a,int z,int h)
{
if(h==k)
{
if(z+ka[a][k+1]<s)
s=z+ka[a][k+1];
}
else
{
if(z<s)
{
for(short w=0;w<=k;++w)
{
if(c[w]==0)
{
c[w]=1;
bk(w,z+ka[a][w],h+1);
c[w]=0;
}
}
}
}
}
int main()
{
vector<short> v[2001];
vector<int> u[2001];
queue<short> q;
fin>>n>>m>>k;
kk[0]=1;
kk[k+1]=n;
for(i=1;i<=k;++i)
{
fin>>j;
kk[i]=j;
}
while(m)
{
fin>>i>>j>>x;
v[i].push_back(j);
u[i].push_back(x);
v[j].push_back(i);
u[j].push_back(x);
m--;
}
for(i=0;i<=k+1;++i)
{
for(j=1;j<=n;++j)
t[j]=1000000000;
t[kk[i]]=0;
for(q.push(kk[i]);q.size();q.pop())
{
x=q.front();
for(j=0;j<v[x].size();++j)
if(t[v[x][j]]>u[x][j]+t[x])
{
t[v[x][j]]=u[x][j]+t[x];
q.push(v[x][j]);
}
}
for(j=0;j<=k+1;++j)
ka[i][j]=t[kk[j]];
}
/*for(i=0;i<=k+1;++i){
for(j=0;j<=k+1;++j)
cout<<ka[i][j]<<" ";
cout<<"\n";}*/
c[0]=1;
bk(0,0,0);
fout<<s;
}