#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,k,m;
const int maxn = 1e5+5;
const int maxk = 6;
const int INF = LLONG_MAX/4;
const int state = 1 << maxk;
vector<pair<int,int>> adj[maxn];
int important_city[maxk];
unordered_map<int,int> pos_city;
void inp(){
cin >> n >> k >> m;
for(int i = 1;i<=k;i++){
cin >> important_city[i];
pos_city[important_city[i]] = i;
}
for(int i = 1;i<=m;i++){
int x,y,w; cin >> x >> y >> w;
adj[x].push_back({y,w});
adj[y].push_back({x,w});
}
}
namespace codeAC{
bool check(){
return n <= maxn && m <= 2 * maxn && k <= 5;
}
int dist[maxn][maxk];
void dijkstra(int start,int idx){
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq;
pq.push({0,start});
dist[start][idx] = 0;
while(!pq.empty()){
int w = pq.top().first;
int u = pq.top().second;
pq.pop();
if(dist[u][idx] < w) continue;
for(pair<int,int> it : adj[u]){
int v = it.first;
int nw = it.second;
if(dist[v][idx] > dist[u][idx] + nw){
dist[v][idx] = dist[u][idx] + nw;
pq.push({dist[v][idx],v});
}
}
}
}
void solve(void){
for(int i = 1;i<=n;i++){
for(int j = 1;j<=k;j++) dist[i][j] = INF;
}
for(int i = 1;i<=k;i++){
dijkstra(important_city[i],i);
}
int best = INF;
for(int i = 1;i<=n;i++){
int cost = 0;
for(int j = 1;j<=k;j++){
cost += dist[i][j];
}
best = min(best,cost);
}
cout << best << '\n';
}
};
/*
4 3 5
1 3 4
1 2 4
1 3 9
2 3 2
2 4 5
3 4 8
*/
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
inp();
if(codeAC::check()) return codeAC::solve(),0;
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |