제출 #898815

#제출 시각아이디문제언어결과실행 시간메모리
898815Samot19Crocodile's Underground City (IOI11_crocodile)C++14
100 / 100
395 ms65188 KiB
#include <iostream> #include <queue> #include <vector> #include <functional> #include <utility> #include <climits> using namespace std; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; int xd, b, w; bool vis[100005]; pair<int, int> dist[100005]; int travel_plan(int n, int m, int r[][2], int l[], int k, int p[]) { vector<vector<pair<int, int>>> g(n); for(int i=0; i<n; i++) { dist[i] = {1000000001, 1000000001}; } for(int i=0; i<m; i++) { g[r[i][0]].push_back({r[i][1], l[i]}); g[r[i][1]].push_back({r[i][0], l[i]}); } for(int i=0; i<k; i++) { dist[p[i]] = {0, 0}; pq.push({0, p[i]}); } while(!pq.empty()) { xd = pq.top().second; pq.pop(); if(vis[xd]) continue; vis[xd] = true; for(auto z : g[xd]) { b = z.first; w = z.second; if(dist[b].first > dist[b].second) { swap(dist[b].first, dist[b].second); } if(max(dist[xd].first, dist[xd].second)+w < dist[b].second) { dist[b].second = min(max(dist[xd].first, dist[xd].second)+w, 1000000001); if(max(dist[b].second, dist[b].first) < 1000000001) { pq.push({max(dist[b].second, dist[b].first), b}); } } } } return max(dist[0].first, dist[0].second); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...