제출 #1191278

#제출 시각아이디문제언어결과실행 시간메모리
1191278just사이버랜드 (APIO23_cyberland)C++20
5 / 100
39 ms13128 KiB
#include "bits/stdc++.h" using namespace std; #define vec vector #define all(x) (x).begin(), (x).end() double solve(int N, int M, int K, int H, vec<int> X, vec<int> Y, vec<int> C, vec<int> S) { using pii = pair<int, int>; map<pii, int> edges; vec<vec<pii>> adj(N); for (int i = 0; i < M; i++) { int u = X[i], v = Y[i], cost = C[i]; adj[u].push_back({v, cost}); adj[v].push_back({u, cost}); edges[{u, v}] = cost; edges[{v, u}] = cost; } vec<int> dist(N, INT_MAX); dist[0] = 0; priority_queue<pii, vec<pii>, greater<pii>> pq; pq.push({0, 0}); while (!pq.empty()) { auto [d, u] = pq.top(); pq.pop(); if (d > dist[u]) continue; for (auto [v, cost] : adj[u]) { if (dist[v] > d + cost) { dist[v] = d + cost; pq.push({dist[v], v}); } } } if (dist[H] == INT_MAX) return -1; if (N == 2) { return dist[H]; } // Subtask O1 if (N == 3) { int other = (H == 1 ? 2 : 1); double result = INT_MAX; if (edges.count({0, H})) { result = edges[{0, H}]; } if (edges.count({0, other}) && edges.count({other, H})) { if (S[other] == 0) result = min(result, (double)edges[{other, H}]); if (S[other] == 1) result = min(result, (double)dist[H]); if (S[other] == 2) result = min(result, (double)edges[{0, other}] / 2.0 + edges[{other, H}]); } return result; } vec<int> backdist(N, INT_MAX); backdist[H] = 0; priority_queue<pii, vec<pii>, greater<pii>> backpq; backpq.push({0, H}); while (!backpq.empty()) { auto [d, u] = backpq.top(); backpq.pop(); if (d > backdist[u]) continue; for (auto [v, cost] : adj[u]) { if (backdist[v] > d + cost) { backdist[v] = d + cost; backpq.push({backdist[v], v}); } } } if (backdist[0] == INT_MAX) return -1; return backdist[H]; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...