#include "crocodile.h"
#include <bits/stdc++.h>
#define pb push_back
#define pf push_front
using namespace std;
#define F first
#define S second
typedef long long ll;
#define pii pair <int, int>
#define pll pair <ll, ll>
typedef long double ld;
const ll N = 1e5 + 100, M = 4096 + 10, len = 21, inf = 1e18;
const ll mod = 1e9 + 7;
vector <pll> q[N];
ll fr[N], last[N], cnt[N];
int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]){
for(int i = 0; i < m; i++){
q[r[i][0]].pb({r[i][1], l[i]});
q[r[i][1]].pb({r[i][0], l[i]});
}
for(ll i = 0; i < n; i++){
last[i] = fr[i] = LLONG_MAX;
}
set <pll> st;
for(int i = 0; i < k; i++){
fr[p[i]] = last[p[i]] = 0;
st.insert({last[p[i]], p[i]});
}
while((ll)st.size() != 0){
ll v = st.begin()->S;
st.erase(st.begin());
for(auto u : q[v]){
if(last[v] + u.S <= fr[u.F]){
if(fr[u.F] != last[u.F]){
st.erase({last[u.F], u.F});
last[u.F] = fr[u.F];
st.insert({last[u.F], u.F});
}
fr[u.F] = last[v] + u.S;
continue;
}
if(last[v] + u.S < last[u.F]){
st.erase({last[u.F], u.F});
last[u.F] = last[v] + u.S;
st.insert({last[u.F], u.F});
}
}
}
return last[0];
}
//
// int main(){
// ios::sync_with_stdio(false);
// cin.tie(NULL);
//
// return 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... |