Pagini recente » Cod sursa (job #2346279) | Cod sursa (job #231242) | Cod sursa (job #519175) | Cod sursa (job #927596) | Cod sursa (job #2127028)
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <set>
using namespace std;
int n,m,k,a,b,c;
vector <int> lk;
int dist[2001][2001];
vector <pair<int,int>> g[2001];
int d[18][1<<18];
const int INF = 0x3f3f3f3f;
void dijistra(int nod)
{
memset(d,INF,sizeof dist[nod]);
set<pair<int,int>> q;
q.insert({0,nod});
dist[nod][nod]=0;
while(!q.empty())
{
a=q.begin()->second;
q.erase(q.begin());
for(pair<int,int> i: g[a])
{
b=i.first;
c=i.second;
if(dist[nod][b]>dist[nod][a]+c)
{
if(dist[nod][b]!=INF)
q.erase(q.find({dist[nod][b],b}));
dist[nod][b]=dist[nod][a]+c;
q.insert({dist[nod][b],b});
}
}
}
}
int main()
{
freopen("ubuntzei.in","r",stdin);
freopen("ubuntzei.out","w",stdout);
scanf("%d %d\n%d", &n,&m,&k);
for(int i=0;i<k;++i)
scanf(" %d", &a), lk.push_back(a);
for(int i=0;i<m;++i)
{
scanf("\n%d %d %d", &a,&b,&c);
g[a].push_back({b,c});
g[b].push_back({a,c});
}
dijistra(1);
for(int i:lk)
dijistra(i);
cout<<dist[1][n];
return 0;
}