제출 #370460

#제출 시각아이디문제언어결과실행 시간메모리
370460gozonite악어의 지하 도시 (IOI11_crocodile)C++14
100 / 100
670 ms65140 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<pair<int, int>> vii; typedef pair<int, int> pi; #define MOD 1000000007LL vector<pair<int, int>> adj[100000]; ll dis[100000]; pair<ll, ll> mdis[100000]; int travel_plan(int N, int M, int R[][2], int *L, int K, int *P) { //cout << "Debugging: " << N << " " << M << " " << K << endl; //for (int i = 0; i < M; i++) cout << R[i][0] << " " << R[i][1] << endl; //for (int i = 0; i < M; i++) cout << L[i] << " "; cout << endl; //for (int i = 0; i < K; i++) cout << P[i] << " "; cout << endl; for (int i = 0; i < N; i++) { adj[i].clear(); dis[i] = 1e18; mdis[i] = {1e18, 1e18}; } for (int i = 0; i < M; i++) { int a = R[i][0], b = R[i][1], w = L[i]; adj[a].push_back({b, w}); adj[b].push_back({a, w}); } using T = pair<ll, ll>; priority_queue<T, vector<T>, greater<T>> q; for (int i = 0; i < K; i++) { q.push({0, P[i]}); dis[P[i]] = 0; } while (!q.empty()) { ll v = q.top().second, ow = q.top().first; q.pop(); if (dis[v] < ow) continue; for (auto pp : adj[v]) { ll u = pp.first, w = pp.second; if (dis[v]+w <= mdis[u].first) { mdis[u].second = mdis[u].first; mdis[u].first = dis[v]+w; } else if (dis[v]+w <= mdis[u].second) { mdis[u].second = dis[v]+w; } if (mdis[u].second < dis[u]) { dis[u] = mdis[u].second; q.push({dis[u], u}); } } //cout << "processed: " << v << " " << dis[v] << endl; } //cout << "Debugging dis, mdis" << endl; //for (int i = 0; i < N; i++) cout << dis[i] << " "; cout << endl; //for (int i = 0; i < N; i++) cout << mdis[i].first << " "; cout << endl; //for (int i = 0; i < N; i++) cout << mdis[i].second << " "; cout << endl; return dis[0]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...