Pagini recente » Cod sursa (job #176886) | Cod sursa (job #2015273) | Cod sursa (job #2103843) | Cod sursa (job #517725) | Cod sursa (job #2320944)
#include <fstream>
#include <vector>
#include <set>
#include <climits>
using namespace std;
ifstream fin("ubuntzei.in");
ofstream fout("ubuntzei.out");
int n,m,a[2003][2003],k,v[17];
multiset<pair<int,int> >heap;
vector<pair<int,int> >g[2003];
void dijkstra(int start)
{
heap.insert(make_pair(0,start));
a[start][start]=0;
while(!heap.empty())
{
int nod=heap.begin()->second;
heap.erase(heap.begin());
for(vector<pair<int,int> > :: iterator it=g[nod].begin();it!=g[nod].end();it++)
{
int to=it->first;
int cost=it->second;
if(a[start][to]>a[start][nod]+cost)
{
if(a[start][to]!=INT_MAX)
heap.erase(heap.find(make_pair(a[start][to],to)));
a[start][to]=a[start][nod]+cost;
heap.insert(make_pair(a[start][to],to));
}
}
}
}
int main()
{
fin>>n>>m>>k;
for(int i=1;i<=k;i++)
{
fin>>v[i];
}
for(int i=1;i<=m;i++)
{
int a,b,c;
fin>>a>>b>>c;
g[a].push_back(make_pair(b,c));
g[b].push_back(make_pair(a,c));
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
a[i][j]=INT_MAX;
dijkstra(1);
for(int i=1;i<=k;i++)
dijkstra(v[i]);
fout<<a[1][n];
}