Submission #220562

#TimeUsernameProblemLanguageResultExecution timeMemory
220562anonymousCrocodile's Underground City (IOI11_crocodile)C++14
100 / 100
1715 ms111708 KiB
#include "crocodile.h" #include <iostream> #include <vector> #include <queue> #include<set> #include <utility> #define MAXN 100005 using namespace std; vector<pair<int,int> > adj[MAXN]; int dp[MAXN]; //min, second min, number of adj bool done[MAXN]; multiset <int> V[MAXN]; priority_queue <pair<int,int> > PQ; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { for (int i=0; i<N; i++) { dp[i] = 1e9 + 10; } for (int i=0; i<K; i++) { dp[P[i]] = 0; PQ.push({0,P[i]}); } for (int i=0; i<M; i++) { adj[R[i][0]].push_back({R[i][1], L[i]}); adj[R[i][1]].push_back({R[i][0], L[i]}); } while (PQ.size()) { int cur = PQ.top().second; dp[cur] = min(dp[cur], -PQ.top().first); PQ.pop(); if (done[cur]) {continue;} done[cur] = true; for (auto v: adj[cur]) { if (!done[v.first]) { V[v.first].insert(dp[cur] + v.second); if (V[v.first].size() >= 2) { auto it = ++V[v.first].begin(); PQ.push({-(*it), v.first}); } } } } return(dp[0]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...