Submission #753409

#TimeUsernameProblemLanguageResultExecution timeMemory
753409JomnoiCyberland (APIO23_cyberland)C++17
0 / 100
3071 ms26412 KiB
#include <bits/stdc++.h> #include "cyberland.h" using namespace std; const int MAX_N = 1e5 + 5; const int MAX_K = 35; const long long INF = 1e18 + 7; vector <pair <int, int>> graph[MAX_N]; double dist[MAX_N][MAX_K]; bool visited[MAX_N][MAX_K]; double solve(int N, int M, int K, int H, vector <int> x, vector <int> y, vector <int> c, vector <int> arr) { for (int i = 0; i < N; i++) { graph[i].clear(); for (int k = 0; k <= K; k++) { dist[i][k] = INF; visited[i][k] = false; } } for (int i = 0; i < M; i++) { graph[x[i]].emplace_back(y[i], c[i]); graph[y[i]].emplace_back(x[i], c[i]); } queue <int> q; q.push(0); visited[0][0] = true; while (!q.empty()) { int u = q.front(); q.pop(); for (auto [v, c] : graph[u]) { if (visited[v][0] == true or v == H) continue; visited[v][0] = true; q.push(v); } } priority_queue <tuple <double, int, int>> pq; for (int i = 0; i < N; i++) { if (visited[i][0] == false) continue; pq.emplace(0, 0, i); dist[i][0] = 0; visited[i][0] = false; } while (!pq.empty()) { auto [d, k, u] = pq.top(); pq.pop(); if (visited[u][k] == true) continue; visited[u][k] = true; for (auto [v, c] : graph[u]) { if (v == H) continue; if (visited[v][k] == false and dist[u][k] + c < dist[v][k]) { dist[v][k] = dist[u][k] + c; pq.emplace(-dist[v][k], k, v); } if (arr[v] == 2 and k < K and visited[v][k + 1] == false and (dist[u][k] + c) / 2 < dist[v][k + 1]) { dist[v][k + 1] = (dist[u][k] + c) / 2; pq.emplace(-dist[v][k + 1], k + 1, v); } } } double res = INF; for (int k = 0; k <= K; k++) { for (auto [v, c] : graph[H]) { res = min(res, dist[v][k] + c); } } if (res == INF) res = -1; return res; }
#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...