Submission #1151247

#TimeUsernameProblemLanguageResultExecution timeMemory
1151247turska사이버랜드 (APIO23_cyberland)C++20
44 / 100
313 ms8520 KiB
#include "cyberland.h" #include <bits/stdc++.h> #include <queue> using namespace std; using ll = long long; const ll INF = 1e18; vector<vector<array<int, 2>>> adj; vector<double> dijkstra(vector<pair<int, double>> starts, int N) { vector<double> dist(N, INF); vector<char> vis(N); priority_queue<pair<double, int>> pq; for (auto [v, d]: starts) { dist[v] = d; pq.push({-d, v}); } while (!pq.empty()) { auto [_, v] = pq.top(); pq.pop(); if (vis[v]) continue; vis[v] = true; for (auto [u, w]: adj[v]) { if (dist[v]+w<dist[u]) { dist[u] = dist[v]+1.0*w; pq.push({-dist[u], u}); } } } return dist; } double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) { adj.assign(N, {}); for (int i=0; i<M; i++) { int u = x[i], v=y[i], w=c[i]; adj[u].push_back({v, w}); adj[v].push_back({u, w}); } double ans = INF; vector<char> vis(N); vis[0] = true; queue<int> q; q.push(0); while (!q.empty()) { int v= q.front(); q.pop(); for (auto [u, _]: adj[v]) { if (!vis[u] && u!=H) { vis[u] = true; q.push(u); } } }; vector<pair<int, double>> starts = {{0, 0}}; for (int i=1; i<N; i++) if (vis[i] && arr[i]==0) starts.push_back({i, 0}); K = min(K, 60); while (K>=0) { vector<double> dist_next(N, INF), dist = dijkstra(starts, N); if (2*dist[H]>=INF) break; ans = min(ans, dist[H]); for (int v=0; v<N; v++) { if (arr[v]!=2 || 2*dist[v]>=INF) continue; for (auto [u, w]: adj[v]) dist_next[u] = min(dist_next[u], dist[v]/2.0+1.0*w); } starts.clear(); for (int v=0; v<N; v++) if (dist_next[v]<=INF/2.0) starts.push_back({v, dist_next[v]}); K--; } if (2*ans>=INF) return -1; return ans; }
#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...