Submission #718159

#TimeUsernameProblemLanguageResultExecution timeMemory
718159thimote75Crocodile's Underground City (IOI11_crocodile)C++14
100 / 100
671 ms74336 KiB
#include "crocodile.h" #include <bits/stdc++.h> using namespace std; #define t_road pair<int, num> #define t_roads vector<t_road> #define graph vector<t_roads> #define num long long #define next first #define cost second #define ndata vector<num> #define inf 1e18 #define ni pair<num, int> #define pq set<ni> graph roads; ndata t_max; ndata t_mix; pq update_queue; bool _update (int index, num value) { if (t_max[index] >= value) { t_mix[index] = t_max[index]; t_max[index] = value; } else if (t_mix[index] > value) { t_mix[index] = value; } else return false; return t_mix[index] != inf; } void update (int index, num value) { ni data = { t_mix[index], index }; if (_update(index, value)) { if (update_queue.find(data) != update_queue.end()) update_queue.erase(data); update_queue.insert({ t_mix[index], index }); } } int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { roads.resize(N); t_max.resize(N, inf); t_mix.resize(N, inf); for (int iR = 0; iR < M; iR ++) { int a = R[iR][0]; int b = R[iR][1]; int c = L[iR]; roads[a].push_back({ b, c }); roads[b].push_back({ a, c }); } for (int i = 0; i < K; i ++) { update(P[i], 0); update(P[i], 0); } while (update_queue.size() != 0) { ni position = *update_queue.begin(); update_queue.erase(position); int current = position.second; num time = position.first; if (current == 0) return time; for (t_road next_road : roads[current]) { num next_time = next_road.cost + time; int next_node = next_road.next; update(next_node, next_time); } } return N; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...