///100 poena
#include <bits/stdc++.h>
#include "crocodile.h"
using namespace std;
const int MAXN=100009,INF=2000000000;
vector<pair<int,int>> graf[MAXN];
int prvi[MAXN],drugi[MAXN];
int rez[MAXN];
bool vi[MAXN];
int val(int node){
    return drugi[node];
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]){
    for(int i=0; i<N; i++) rez[i]=INF;
    for(int i=0; i<M; i++){
        int a=R[i][0],b=R[i][1],w=L[i];
        graf[a].push_back({b,w});
        graf[b].push_back({a,w});
    }
    for(int i=0; i<N; i++) prvi[i]=drugi[i]=INF;
    priority_queue<pair<int,int>> red;
    for(int i=0; i<K; i++) red.push({0,P[i]});
    while(red.size()){
        int node=red.top().second,tr=-red.top().first;
        red.pop();
        if(vi[node]) continue;
        vi[node]=true;
        rez[node]=tr;
        for(auto x:graf[node]){
            int nw=rez[node]+x.second;
            if(nw<=prvi[x.first]){drugi[x.first]=prvi[x.first];prvi[x.first]=nw;continue;}
            if(nw<=drugi[x.first]){drugi[x.first]=nw; continue;}
        }
        for(auto x:graf[node])
            red.push({-val(x.first),x.first});
    }
    return rez[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... |