Pagini recente » Cod sursa (job #2623968) | Cod sursa (job #2832343) | Cod sursa (job #2811380) | Cod sursa (job #2297333) | Cod sursa (job #1076396)
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
typedef pair<int,int> PII;
const int INF = (1<<30);
const int NMAX = 2002;
const int MMAX = 10002;
const int KMAX = 17;
int N,M,K,KP;
int P[NMAX];
int DP[1<<KMAX][NMAX];
vector<PII> V[NMAX];
int main()
{
int i,j,a,b,c;
vector<PII>::iterator it;
freopen("ubuntzei.in","r",stdin);
freopen("ubuntzei.out","w",stdout);
scanf("%d%d%d",&N,&M,&K);
for(i=1; i<=K; i++)
{
scanf("%d",&a);
P[a]=i;
}
for(; M; --M)
{
scanf("%d%d%d",&a,&b,&c);
V[a].push_back(make_pair(b,c));
V[b].push_back(make_pair(a,c));
}
KP=1<<K;
for(i=0;i<KP;i++)
for(j=1;j<=N;j++)
DP[j][i]=INF;
DP[1][0]=0;
for(i=0; i<KP; i++)
for(j=1; j<=N; j++)
for(it=V[j].begin(); it!=V[j].end(); it++)
DP[it->first][i+(1<<(P[it->first]-1))]=min(DP[it->first][i+(1<<(P[it->first]-1))],DP[j][i]+it->second);
printf("%d\n",DP[N][KP-1]);
return 0;
}