#include "crocodile.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define pb emplace_back
#define AI(i) begin(i), end(i)
template<class T> bool chmin(T &a, T b) { return b < a ? (a = b, true) : false; }
template<class T> bool chmax(T &a, T b) { return a < b ? (a = b, true) : false; }
#ifdef KEV
#define DE(args...) kout("[ " + string(#args) + " ] = ", args)
void kout() { cerr << endl; }
template<class T, class ...U> void kout(T a, U ...b) { cerr << a << ' ', kout(b...); }
template<class T> void debug(T L, T R) { while (L != R) cerr << *L << " \n"[next(L) == R], ++L; }
#else
#define DE(...) 0
#define debug(...) 0
#endif
const int MAX_N = 100010, inf = 1e9 + 7;
vector<pair<int,int>> edge[MAX_N];
int bst[MAX_N], sec[MAX_N], fr[MAX_N];
int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
fill(bst, bst + N, inf), fill(sec, sec + N, inf), fill(fr, fr + N, inf);
for (int i = 0;i < M;++i) {
int a = R[i][0], b = R[i][1], w = L[i];
edge[a].pb(b, w);
edge[b].pb(a, w);
}
// only second best should enter priority queue
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
for (int i = 0;i < K;++i) {
pq.emplace(0, P[i]);
bst[P[i]] = sec[P[i]] = 0;
}
vector<bool> vis(N);
while (pq.size()) {
auto [len, x] = pq.top(); pq.pop();
if (vis[x]) continue;
vis[x] = true;
for (auto [u, w] : edge[x]) {
int curlen = min(inf, len + w), so = x;
if (curlen < bst[u]) {
assert(so != fr[u]);
swap(curlen, bst[u]), swap(so, fr[u]);
}
if (curlen < sec[u]) {
swap(curlen, sec[u]);
pq.emplace(sec[u], u);
}
}
}
return sec[0];
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2668 KB |
Output is correct |
2 |
Correct |
2 ms |
2668 KB |
Output is correct |
3 |
Correct |
2 ms |
2668 KB |
Output is correct |
4 |
Correct |
3 ms |
2796 KB |
Output is correct |
5 |
Correct |
3 ms |
2796 KB |
Output is correct |
6 |
Correct |
2 ms |
2796 KB |
Output is correct |
7 |
Correct |
3 ms |
2796 KB |
Output is correct |
8 |
Correct |
3 ms |
2796 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2668 KB |
Output is correct |
2 |
Correct |
2 ms |
2668 KB |
Output is correct |
3 |
Correct |
2 ms |
2668 KB |
Output is correct |
4 |
Correct |
3 ms |
2796 KB |
Output is correct |
5 |
Correct |
3 ms |
2796 KB |
Output is correct |
6 |
Correct |
2 ms |
2796 KB |
Output is correct |
7 |
Correct |
3 ms |
2796 KB |
Output is correct |
8 |
Correct |
3 ms |
2796 KB |
Output is correct |
9 |
Correct |
4 ms |
2924 KB |
Output is correct |
10 |
Correct |
2 ms |
2668 KB |
Output is correct |
11 |
Correct |
3 ms |
2796 KB |
Output is correct |
12 |
Correct |
6 ms |
3052 KB |
Output is correct |
13 |
Correct |
5 ms |
3180 KB |
Output is correct |
14 |
Correct |
3 ms |
2796 KB |
Output is correct |
15 |
Correct |
3 ms |
2796 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
2668 KB |
Output is correct |
2 |
Correct |
2 ms |
2668 KB |
Output is correct |
3 |
Correct |
2 ms |
2668 KB |
Output is correct |
4 |
Correct |
3 ms |
2796 KB |
Output is correct |
5 |
Correct |
3 ms |
2796 KB |
Output is correct |
6 |
Correct |
2 ms |
2796 KB |
Output is correct |
7 |
Correct |
3 ms |
2796 KB |
Output is correct |
8 |
Correct |
3 ms |
2796 KB |
Output is correct |
9 |
Correct |
4 ms |
2924 KB |
Output is correct |
10 |
Correct |
2 ms |
2668 KB |
Output is correct |
11 |
Correct |
3 ms |
2796 KB |
Output is correct |
12 |
Correct |
6 ms |
3052 KB |
Output is correct |
13 |
Correct |
5 ms |
3180 KB |
Output is correct |
14 |
Correct |
3 ms |
2796 KB |
Output is correct |
15 |
Correct |
3 ms |
2796 KB |
Output is correct |
16 |
Correct |
489 ms |
41444 KB |
Output is correct |
17 |
Correct |
79 ms |
10860 KB |
Output is correct |
18 |
Correct |
105 ms |
12268 KB |
Output is correct |
19 |
Correct |
629 ms |
45656 KB |
Output is correct |
20 |
Correct |
309 ms |
36588 KB |
Output is correct |
21 |
Correct |
40 ms |
6380 KB |
Output is correct |
22 |
Correct |
328 ms |
31980 KB |
Output is correct |