#include "crocodile.h"
#define fi first
#define se second
#define maxn 100005
#define maxm 1000005
#include <bits/stdc++.h>
using namespace std;
using ii = pair<int, int>;
struct edge {
int u, v, l;
edge() {}
edge(int _u, int _v, int _l) : u(_u), v(_v), l(_l) {}
} edges[maxm];
int n, m, k;
int p[maxn];
vector<ii> adj[maxn];
ii kc[maxn];
ii f(ii x, int y) {
ii cr = x;
if (cr.fi >= y) {
cr.se = cr.fi;
cr.fi = y;
} else if (cr.se >= y) cr.se = y;
return cr;
}
void modified_dijkstra() {
set<pair<int, int> > q;
for (int i = 0; i < k; i++) {
int u = p[i];
kc[u] = {0, 0};
q.insert({0, u});
}
while (!q.empty()) {
int u = q.begin()->se; q.erase(q.begin());
for (auto [v, l] : adj[u]) {
ii fg = f(kc[v], kc[u].se+l);
if (kc[v].se > fg.se) {
q.erase({kc[v].se, v});
q.insert({fg.se, v});
}
kc[v] = fg;
}
}
}
int solve() {
for (int i = 0; i < n; i++) kc[i] = {INT_MAX, INT_MAX};
for (int i = 0; i < m; i++) {
auto [u, v, l] = edges[i];
adj[u].emplace_back(v, l);
adj[v].emplace_back(u, l);
}
modified_dijkstra();
return kc[0].se;
}
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
n = N; m = M; k = K;
for (int i = 0; i < k; i++) p[i] = P[i];
for (int i = 0; i < m; i++) edges[i] = edge(R[i][0], R[i][1], L[i]);
return solve();
}
/*
5 7 2
0 2 4
0 3 3
3 2 2
2 1 10
0 1 100
0 4 7
3 4 9
1 3
14
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |