Pagini recente » Cod sursa (job #2916391) | Cod sursa (job #2766240) | Cod sursa (job #2607047) | Cod sursa (job #1362998) | Cod sursa (job #1375041)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define oo 1<<30
#define N 2004
using namespace std;
struct str
{
int x,c;
};
vector <str> a[N];
queue <int> q;
int ko[20];
int d[N][20];
int dp[1<<16][20];
int n,m,k;
void Read()
{
ifstream fin("ubuntzei.in");
fin>>n>>m>>k;
int z,y,i;
str w;
for(i=1; i<=k; i++)
fin>>ko[i];
for(i=1; i<=m; i++)
{
fin>>w.x>>y>>w.c;
a[y].push_back(w);
swap(w.x,y);
a[y].push_back(w);
}
}
void Setoo()
{
for(int i=1; i<=n; i++)
for(int j=1; j<=k; j++)
d[i][j]=oo;
for(int i=0; i<=(1<<k)-1; i++)
for(int j=1; j<=k; j++)
dp[i][j]=oo;
}
void BellF(int j,int rad)
{
q.push(rad);
d[rad][j]=0;
int nod;
int i;
while(!q.empty())
{
nod=q.front();
q.pop();
for(i=0; i<a[nod].size(); i++)
if(d[a[nod][i].x][j]>d[nod][j]+a[nod][i].c)
{
d[a[nod][i].x][j]=d[nod][j]+a[nod][i].c;
q.push(a[nod][i].x);
}
}
}
void MakeBell()
{
for(int i=1; i<=k; i++)
BellF(i,ko[i]);
}
void Salv()
{
int i,j,p,sol;
for(i=1; i<=k; i++)
dp[1<<i][i]=d[ko[i]][1];
// for(i=2; i<=(1<<k); i++)
// for(j=1; j<=k; j++)
// if( i & (1<<(j)) )
// for(p=1; p<=k; p++)
// if(p!=j )
// {
// dp[i][j]=min(dp[i][j],dp[i ^ (1<<j)][p] + d[ko[j]][p]);
// }
// sol=oo;
// for(i=1; i<=k; i++ )
// sol=min(sol,d[1<<k][i]+d[n][i]);
cout<<dp[2][1];
}
int main()
{
Read();
Setoo();
MakeBell();
Salv();
return 0;
}