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;
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];
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |