Submission #1322790

#TimeUsernameProblemLanguageResultExecution timeMemory
1322790tkm_algorithmsCrocodile's Underground City (IOI11_crocodile)C++20
89 / 100
143 ms12208 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; using ll = long long; //#define int ll //using P = pair<int, int>; #define all(x) x.begin(), x.end() #define rep(i, l, n) for (int i = l; i < (n); ++i) #define sz(x) (int)x.size() const char nl = '\n'; const int mod = 1e9+7; const int NMAX = 1010; const int inf = 1e9+10; vector<pair<int, int>> g[NMAX]; bool specific[NMAX]; int mn1[NMAX], mn2[NMAX]; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { memset(specific, false, sizeof specific); rep(i, 0, M) g[R[i][0]].push_back({R[i][1], L[i]}), g[R[i][1]].push_back({R[i][0], L[i]}); rep(i, 0, K)specific[P[i]] = 1; rep(i, 0, N)mn1[i] = mn2[i] = inf; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; rep(i, 0, K) { mn1[P[i]] = 0; pq.push({0, P[i]}); } while (!pq.empty()) { auto [dis, node] = pq.top(); pq.pop(); //cout << node << " " << dis << nl; if (mn2[node] != inf)continue; if (dis < mn1[node]) { assert(mn1[node] == inf); mn1[node] = dis; } else { mn2[node] = dis; //cout << "im here" << nl; for (auto [son, weight]: g[node]) pq.push({dis+weight, son}); } } return mn2[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...