Pagini recente » Cod sursa (job #181116) | Cod sursa (job #2283410) | Cod sursa (job #31455) | Cod sursa (job #3262672) | Cod sursa (job #295810)
Cod sursa(job #295810)
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
#define maxP 52
#define maxN 512
#define oo 100000000
#define ff first
#define ss second
#define pb push_back
vector <int> A[maxN], C[maxN];
int N, M, P, D[maxN], V[maxN], Sol;
set < pair <int,int> > S;
void dijkstra () {
S.insert(make_pair(0, 1));
for (int i = 2; i <= N; ++ i)
V[i] = oo;
while (!S.empty()) {
pair <int,int> now = * (S.begin()); S.erase(S.begin());
for (int i = 0; i < A[now.ss].size(); ++ i)
if (V[A[now.ss][i]] > now.ff + C[now.ss][i]) {
V[A[now.ss][i]] = now.ff + C[now.ss][i];
S.insert(make_pair(V[A[now.ss][i]], A[now.ss][i]));
}
}
}
int main () {
int i, a, b, c, x;
freopen("team.in", "r", stdin);
freopen("team.out", "w", stdout);
scanf("%d%d%d", &P, &N, &M);
for (i = 1; i <= M; ++ i) {
scanf("%d%d%d", &a, &b, &c);
A[a].pb(b);
C[a].pb(c);
A[b].pb(a);
C[b].pb(c);
}
for (i = 1; i <= P; ++ i) {
scanf("%d", &x);
D[x] ++;
}
dijkstra ();
for (i = 1; i <= N; ++ i)
if (D[i])
Sol += V[i];
printf("%d\n", Sol);
}