Submission #220543

#TimeUsernameProblemLanguageResultExecution timeMemory
220543anonymousCrocodile's Underground City (IOI11_crocodile)C++14
46 / 100
8 ms2944 KiB
#include "crocodile.h" #include <iostream> #include <vector> #include <queue> #include <utility> #define MAXN 100005 using namespace std; vector<pair<int,int> > adj[MAXN]; int dp[MAXN], dp2[MAXN], C[MAXN]; //min, second min, number of adj bool vis[MAXN], done[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] = dp2[i] = 1e9 + 10; } for (int i=0; i<K; i++) { dp[P[i]] = dp2[P[i]] = 0; vis[P[i]] = 1; 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; PQ.pop(); if (done[cur]) {continue;} done[cur] = true; for (auto v: adj[cur]) { if (!done[v.first]) { if (!C[v.first]) { dp[v.first] = dp2[cur] + v.second; } else { dp2[v.first] = min(dp2[v.first], dp2[cur] + v.second); if (dp[v.first] > dp2[v.first]) { swap(dp[v.first], dp2[v.first]); } } C[v.first] += 1; if (C[v.first] >= 2) {PQ.push({-dp2[v.first], v.first});} } } } return(dp2[0]); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...