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 "grader.cpp"
#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std ;
const int MAX = 1e5 + 10 ;
pair<int , int> dist[MAX] ;
vector< vector< pair<int , int> > >adj(MAX) ;
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
memset(dist , -1 , sizeof(dist)) ;
for(int i = 0 ; i < M ; ++i)
{
int x = R[i][0] , y = R[i][1] ;
adj[x].push_back({y , L[i]*1ll}) ;
adj[y].push_back({x, L[i] * 1ll}) ;
}
priority_queue< pair<int , int> , vector< pair<int , int> > , greater< pair<int , int> > >q ;
for(int i = 0 ; i < K ; ++i)
{
dist[P[i]] = {0 , 0} ;
q.push({0ll, P[i]}) ;
}
while(!q.empty())
{
pair<int, int>p = q.top() ;
q.pop() ;
int node = p.second ;
int cost = p.first ;
if(cost > dist[node].second)
continue ;
for(auto &child : adj[node])
{
int to = child.first ;
int ncost = cost + child.second ;
int prv = dist[to].second ;
if(ncost < dist[to].first || dist[to].first == -1)
dist[to].second = dist[to].first , dist[to].first = ncost ;
else if(ncost < dist[to].second || dist[to].second == -1)
dist[to].second = ncost ;
if(dist[to].second < prv || (prv == -1 && dist[to].second != -1))
q.push({dist[to].second, to}) ;
}
}
return dist[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... |