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 "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
struct elem{
int x;
int dist1, dist2;
bool operator<(const elem &ot) const{
if(dist2!=ot.dist2) return dist2>ot.dist2;
return dist1>ot.dist1;
}
};
int travel_plan(int n, int m, int r[][2], int l[], int k, int p[])
{
vector<vector<pair<int, int>>> g(n+1);
vector<bool> used(n+1, 0);
vector<int> dist1(n+1, 1e9), dist2(n+1, 1e9);
priority_queue<elem> pq;
for(int i=0;i<m;++i){
g[r[i][0]+1].push_back({r[i][1]+1, l[i]});
g[r[i][1]+1].push_back({r[i][0]+1, l[i]});
}
for(int i=0;i<k;++i){
dist1[p[i]+1]=dist2[p[i]+1]=0;
pq.push({p[i]+1, dist1[p[i]+1], dist2[p[i]+1]});
}
while(!pq.empty()){
elem x=pq.top();
pq.pop();
if(used[x.x]) continue;
used[x.x]=1;
for(auto it:g[x.x]){
elem nx;
nx.x=it.first;
nx.dist1=dist1[it.first];
nx.dist2=dist2[it.first];
int ndist=x.dist2+it.second;
if(ndist<=nx.dist1){
nx.dist2=nx.dist1;
nx.dist1=ndist;
pq.push(nx);
}
else if(ndist<nx.dist2){
nx.dist2=ndist;
pq.push(nx);
}
dist1[nx.x]=nx.dist1;
dist2[nx.x]=nx.dist2;
}
}
return dist2[1];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |