#include <bits/stdc++.h>
using namespace std;
bool debug=0;
#define dout if(debug)cout
#define ll long long
#define pb push_back
#define mp make_pair
int main(){
int n,k,m;
cin>>n>>k>>m;
vector<int> ks(k);
for(int i=0; i<k; i++){
cin>>ks[i];
--ks[i];
}
vector<vector<pair<int, int>>> adj(n);
int u,v,c;
for(int i=0; i<m; i++){
cin>>u>>v>>c;
--u;--v;
adj[u].pb({v,c});
adj[v].pb({u,c});
}
dout<<"--input done--\n";
// case where k <= 3
// in the ideal configuration, there exists a node such that each important city has a direct path to that node
vector<vector<int>> dist(n, vector<int>(k,-1));
// we must do dijkstra to get the min dist from each node to each important city
priority_queue<pair<int, int>> q;
int cur_node, cur_dist;
vector<vector<int>> ddist(n, vector<int>(k,-1));
for(int i=0; i<k; i++){
// do dijkstra from the k-th important city
dout<<"--pushing to q--\n";
q.push({0, ks[i]});
while(!q.empty()){
cur_dist = -(q.top().first);
cur_node = q.top().second;
q.pop();
if(ddist[cur_node][i] != -1) continue; // already visitted
dout<<"--not continued--\n";
ddist[cur_node][i] = cur_dist;
for(pair<int, int> p:adj[cur_node]){
q.push({-(cur_dist+p.second), p.first});
}
}
dout<<"--dijkstra for "<<i<<"-th important city is done!\n";
}
// dijkstra should be done..
dout<<"--dijkstra done--\n";
// for k <= 3 it's just finding the node with minimum sum of distances
int best_sum=0, cur_sum;
for(int j=0; j<k; j++){
best_sum += ddist[0][j];
}
for(int i=1; i<n; i++){
cur_sum=0;
for(int j=0; j<k; j++){
cur_sum += ddist[i][j];
}
if(cur_sum < best_sum){
dout<<"new best sum at node "<<i<<": "<<cur_sum<<"!\n";
best_sum = cur_sum;
}
}
cout<<best_sum<<"\n";
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... |