#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll INF = 1e18;
vector<vector<pair<ll, ll>>> arr;
vector<pair<ll, ll>> dis;
vector<bool> vis;
vector<ll> exits;
void dijkstra(){
priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>> q;
for(ll &i : exits){
q.push({0, i});
dis[i] = {0, 0};
}
while(!q.empty()){
int actnode = q.top().second;
q.pop();
if(vis[actnode]){
continue;
}
vis[actnode] = 1;
for(auto &[x, y] : arr[actnode]){
if(dis[actnode].second + y < dis[x].first){
if(dis[x].first < dis[x].second){
dis[x].second = dis[x].first;
}
dis[x].first = dis[actnode].second + y;
} else if(dis[actnode].second + y < dis[x].second){
dis[x].second = dis[actnode].second + y;
}
if(dis[x].second != INF){
q.push({dis[x].second, x});
}
}
}
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){
arr.assign(N, vector<pair<ll, ll>>(0));
dis.assign(N, {INF, INF});
vis.assign(N, 0);
for(int i = 0; i < M; i++){
arr[R[i][0]].push_back({R[i][1], L[i]});
arr[R[i][1]].push_back({R[i][0], L[i]});
}
for(int i = 0; i < K; i++){
exits.push_back(P[i]);
}
dijkstra();
return dis[0].second;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |