Submission #1151215

#TimeUsernameProblemLanguageResultExecution timeMemory
1151215turskaCyberland (APIO23_cyberland)C++20
44 / 100
28 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<ll> dijkstra(vector<int> starts, int N) { vector<ll> dist(N, INF); priority_queue<pair<ll, int>> pq; for (auto v: starts) { dist[v] = 0; pq.push({0, v}); } while (!pq.empty()) { auto [d, v] = pq.top(); pq.pop(); d = - d; if (d>dist[v]) continue; for (auto [u, w]: adj[v]) { if (dist[v]+w<dist[u]) { dist[u] = dist[v]+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<int> starts = {0}; for (int i=1; i<N; i++) if (vis[i] && arr[i]==0) starts.push_back(i); vector<ll> d0 = dijkstra(starts, N), d1 = dijkstra({H}, N); if (d1[0]==INF) return -1; for (auto v: starts) ans = min(ans, (double)d1[v]); for (int i=0; i<N; i++) { if (arr[i]!=2 || d0[i]==INF || d1[i]==INF) continue; int cnt = K; double dist = d0[i]; while (dist>1e-9 && cnt) { dist /= 2; cnt--; } ans = min(ans, dist+d1[i]); } 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...