This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#include "crocodile.h"
using namespace std;
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
  vector<pair<int, int>> g[N];
  for(int i = 0;i < M;i++){
    g[R[i][0]].emplace_back(R[i][1], L[i]);
    g[R[i][1]].emplace_back(R[i][0], L[i]);
  }
  long long dp[N], gar[N];
  for(int i = 0;i < N;i++) dp[i] = gar[i] = LONG_LONG_MAX;
  set<pair<long long, int>> s;
  for(int i = 0;i < K;i++) {
    dp[P[i]] = 0;
    s.insert({0, P[i]});
  }
  while(!s.empty()){
    int i = s.begin()->second;
    s.erase(s.begin());
    for(auto [to, c] : g[i]){
      if(dp[to] <= dp[i]+c) continue;
      if(gar[to] == LONG_LONG_MAX){
        gar[to] = dp[i]+c;
        continue;
      }
      if(gar[to] > dp[i]+c){
        if(dp[to] > gar[to]){
          s.erase({dp[to], to});
          dp[to] = gar[to];
          s.insert({dp[to], to});
        }
        gar[to] = dp[i]+c;
        continue;
      }
      s.erase({dp[to], to});
      dp[to] = dp[i]+c;
      s.insert({dp[to], to});
    }
  }
  return dp[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... |