#include "crocodile.h"
#include<bits/stdc++.h>
using namespace std;
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[])
{
int n=N,m=M,k=K;
vector<pair<int,int>>adj;
vector<vector<pair<int,int>>>g(n);
priority_queue<pair<int,int>>pq;
vector<pair<int,int>>dis(n,pair<int,int>{1e9+2,1e9+2});
vector<bool>vis(n,false);
for(int i=0;i<m;i++){
int a=R[i][0],b=R[i][1];
adj.push_back({a,b});
}
for(int i=0;i<m;i++){
int w=L[i];
g[adj[i].first].push_back({adj[i].second,w});
g[adj[i].second].push_back({adj[i].first,w});
}
for(int i=0;i<k;i++){
int x=P[i];
dis[x].first=dis[x].second=0;
pq.push({0,x});
}
while(!pq.empty()){
int u=pq.top().second;
pq.pop();
if(vis[u]) continue;
else vis[u]=1;
for(auto p : g[u]){
int w=p.second;int v=p.first;
if(w==0) continue;
if(dis[u].second+w<dis[v].first){
dis[v].second=dis[v].first;
dis[v].first=dis[u].second+w;
pq.push({-dis[v].second,v});
}
else if(dis[v].first!=0 && dis[u].second+w<dis[v].second){
dis[v].second=dis[u].second+w;
pq.push({-dis[v].second,v});
}
}
}
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... |