Submission #540528

#TimeUsernameProblemLanguageResultExecution timeMemory
540528GurbanCrocodile's Underground City (IOI11_crocodile)C++17
100 / 100
549 ms63244 KiB
#include "crocodile.h" #include "bits/stdc++.h" using namespace std; using ll = long long; const int maxn=1e5+5; bool vis[maxn]; int dis[maxn][2]; vector<pair<int,int>>E[maxn]; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { for(int i = 0;i < M;i++){ E[R[i][0]].push_back({R[i][1],L[i]}); E[R[i][1]].push_back({R[i][0],L[i]}); } for(int i = 0;i < N;i++) dis[i][0] = dis[i][1] = 1e9; priority_queue<pair<int,int>>q; for(int i = 0;i < K;i++){ dis[P[i]][0] = dis[P[i]][1] = 0; q.push({0,P[i]}); } while(!q.empty()){ int x = q.top().second; q.pop(); if(vis[x]) continue; vis[x] = 1; for(auto i : E[x]){ if(dis[x][1] + i.second >= dis[i.first][1]) continue; if(dis[x][1] + i.second < dis[i.first][0]){ dis[i.first][1] = dis[i.first][0]; dis[i.first][0] = dis[x][1] + i.second; q.push({-dis[i.first][1],i.first}); } else if(dis[x][1] + i.second < dis[i.first][1]){ dis[i.first][1] = dis[x][1] + i.second; q.push({-dis[i.first][1],i.first}); } } } // for(int i = 0;i < N;i++){ // cout<<i<<' '<<dis[i][0]<<' '<<dis[i][1]<<'\n'; // } return dis[0][1]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...