#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;
#define mp make_pair
#define pb push_back
#define F first
#define S second
#define debug(x) std::cout << #x << ": " << x << "\n"
#define all(v) v.begin(), v.end()
#define li(i,a,b) for (int (i) = (a); (i) < (b); (i)++)
#define endl '\n'
#define mem(name,val) memset(name,val,sizeof(name))
#define min(a,b) (a<=b ? a : b)
#define max(a,b) (a>=b ? a : b)
//using u64 = uint64_t;
//using u128 = __uint128_t;
int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]){
const ll inf = 1e18;
vector<pair<int,ll>> adj[n];
li(i,0,m){
adj[r[i][0]].pb({r[i][1],l[i]});
adj[r[i][1]].pb({r[i][0],l[i]});
}
vector<pair<ll,ll>> d(n, {inf,inf}); //best,second best
priority_queue<pii, vector<pii>, greater<pii>> pq;
li(i,0,k){
pq.push({0,p[i]});
d[p[i]] = {0,0};
}
while(!pq.empty()){
auto [d_v, v] = pq.top();
pq.pop();
if(d_v>d[v].S)continue;
for(const auto [to,len] : adj[v]){
if(d_v+len < d[to].F){
if(d[to].F<d[to].S)pq.push({d[to].F,to});
d[to].S = d[to].F;
d[to].F = d_v+len;
}
else if(d_v+len < d[to].S){
d[to].S = d_v+len;
pq.push({d[to].S,to});
}
}
}
return d[0].S;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |