Submission #421204

#TimeUsernameProblemLanguageResultExecution timeMemory
421204OttoTheDinoCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
841 ms88576 KiB
#include <bits/stdc++.h> using namespace std; #define rep(i,s,e) for (ll i = s; i <= e; ++i) #define rrep(i,s,e) for (ll i = s; i >= e; --i) #define pb push_back #define pf push_front #define fi first #define se second typedef long long ll; typedef pair<ll, ll> ii; typedef vector<ll> vi; typedef vector<ii> vii; int travel_plan (int n, int m, int r[][2], int l[], int k, int p[]) { vii neibs[n]; rep (i,0,m-1) { neibs[r[i][0]].pb({r[i][1], l[i]}); neibs[r[i][1]].pb({r[i][0], l[i]}); } multiset<ll> doors[n]; bool done[n]={}; ll best[n] = {}; priority_queue<ii, vii, greater<ii>> pq; rep (i,0,k-1) pq.push({0, p[i]}); while (!pq.empty()) { ll dist = pq.top().fi, u = pq.top().se; pq.pop(); if (done[u]) continue; if (u==0) return dist; for (ii vd : neibs[u]) { ll v = vd.fi, d = vd.se; if ((ll)doors[v].size()>1) { ll oldboi = *(++doors[v].begin()); if (d+dist<oldboi) { doors[v].insert(d+dist); ll boi = *(++doors[v].begin()); if ((ll)doors[v].size()>1 && !done[v] && (!best[v] || boi<best[v])) { pq.push({boi, v}); best[v] = boi; } } } else { doors[v].insert(d+dist); ll boi = *(++doors[v].begin()); if ((ll)doors[v].size()>1 && !done[v] && (!best[v] || boi<best[v])) { pq.push({boi, v}); best[v] = boi; } } } done[u]=1; } assert(0==1); return -1; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...