Submission #345742

#TimeUsernameProblemLanguageResultExecution timeMemory
345742Kevin_Zhang_TWCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
629 ms45656 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...