제출 #372886

#제출 시각아이디문제언어결과실행 시간메모리
372886xt0r3악어의 지하 도시 (IOI11_crocodile)C++14
100 / 100
1066 ms65504 KiB
#include<bits/stdc++.h> #include "crocodile.h" using namespace std; constexpr int MAXN = 1e5 + 5; pair<int, int> key[MAXN]; map<pair<int, int>, bool> volt; vector<pair<int, int> > edges[MAXN]; int n, m, k; int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) { n = N; m = M; k = K; fill(key, key + n, pair<int, int>{1e9 + 5, 1e9 + 5}); for(int i = 0; i < m; i++){ edges[R[i][0]].emplace_back(R[i][1], L[i]); edges[R[i][1]].emplace_back(R[i][0], L[i]); } priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq; for(int i = 0; i < k; i++){ key[P[i]].first = key[P[i]].second = 0; pq.push(make_pair(0, P[i])); } while(!pq.empty()){ pair<int, int> p = pq.top(); pq.pop(); int u = p.second; int w = p.first; if(key[u].second != w) continue; for(pair<int, int> q : edges[u]){ int curr = w + q.second; int v = q.first; if(key[v].second > curr && !volt[make_pair(min(u, v), max(u, v))]){ volt[make_pair(min(u, v), max(u, v))] = 1; if(key[v].first > curr) swap(curr, key[v].first); key[v].second = curr; pq.push(make_pair(key[v].second, v)); } } } return key[0].second; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...