Submission #402726

#TimeUsernameProblemLanguageResultExecution timeMemory
402726CantfindmeCrocodile's Underground City (IOI11_crocodile)C++17
89 / 100
599 ms73808 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pi; #define f first #define s second #define FAST ios_base::sync_with_stdio(0); cin.tie(0); #define all(x) x.begin(),x.end() const int maxn = 100010; ll state[maxn]; ll dist[maxn], distreal[maxn]; vector <pi> adjlist[maxn]; int n, e; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { n = N; e = M; for (int i =0;i<e;i++) { int a = R[i][0], b = R[i][1], c = L[i]; adjlist[a].push_back(pi(b,c)); adjlist[b].push_back(pi(a,c)); } priority_queue <pi, vector<pi>, greater<pi>> pq; memset(dist,-1,sizeof dist); memset(distreal,-1,sizeof distreal); for (int i =0;i<K;i++) { pq.push(pi(0, P[i])); distreal[P[i]] = 0; state[P[i]] = 2; } while (!pq.empty()) { auto [d,x] = pq.top(); pq.pop(); if (d != distreal[x]) continue; for (auto [i,c] : adjlist[x]) { if (state[i] == 0) { state[i] = 1; dist[i] = c + d; } else if (state[i] == 1) { if (distreal[i] == -1 or distreal[i] > c + d) { distreal[i] = c + d; if (distreal[i] < dist[i]) swap(dist[i],distreal[i]); pq.push(pi(distreal[i],i)); } } } } return distreal[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...