Pagini recente » Cod sursa (job #2896999) | Cod sursa (job #468801) | Cod sursa (job #698629) | Cod sursa (job #2156378) | Cod sursa (job #892537)
Cod sursa(job #892537)
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#define inf 2000000000
using namespace std;
struct coord{int x,c;};
vector<coord> L[10005];
queue <int> Q;
int n, m, k, loc[20],d[2005][2005];
void Read()
{
coord aux;
int i,x,y;
freopen("ubuntzei.in","r",stdin);
scanf("%d %d",&n, &m);
scanf("%d",&k);
for(i=1; i<=k; i++)
scanf("%d",&loc[i]);
for(i=1; i<=m; i++)
{
scanf("%d %d %d", &x, &y, &aux.c);
aux.x = y;
L[x].push_back(aux);
aux.x = x;
L[y].push_back(aux);
}
}
void Initializare(int nod)
{
for(int i=1; i<=n; i++)
d[nod][i] = inf;
}
void Bellmanford(int nod)
{
Initializare(nod);
d[nod][nod] = 0;
Q.push(nod);
while(!Q.empty())
{
int k = Q.front();
Q.pop();
vector<coord>::iterator it;
for(it=L[k].begin(); it!=L[k].end(); it++)
{
coord aux = *it;
if(d[nod][aux.x] > d[nod][k] + aux.c)
{
d[nod][aux.x] = d[nod][k] + aux.c;
Q.push(aux.x);
}
}
}
}
void Solve()
{
if(k==0)
{
Bellmanford(1);
freopen("ubuntzei.out","w",stdout);
printf("%d\n", d[1][n]);
}
// else
// {
// for(int i=1; i<=k; i++)
// Bellmanford(loc[i]);
//
// for(int i=1; i<=n; i++)
// {
// for(int j=1; j<=n; j++)
// cout << d[i][j] << " ";
// cout << "\n";
// }
// }
}
int main()
{
Read();
Solve();
return 0;
}