Submission #1114291

#TimeUsernameProblemLanguageResultExecution timeMemory
1114291adaawfCyberland (APIO23_cyberland)C++17
15 / 100
3056 ms42600 KiB
#include <iostream> #include <vector> #include <queue> #include <iomanip> using namespace std; vector<pair<int, int>> g[100005]; double f[100005][35], d[100005][35]; double solve(int n, int m, int k, int h, vector<int> x, vector<int> y, vector<int> c, vector<int> a) { vector<int> v, vv; for (int i = 0; i < n; i++) g[i].clear(); for (int i = 0; i < n; i++) { if (a[i] == 0) v.push_back(i); if (a[i] == 2) vv.push_back(i); for (int j = 0; j <= k; j++) { f[i][j] = 1e18; } } for (int i = 0; i < m; i++) { g[x[i]].push_back({y[i], c[i]}); g[y[i]].push_back({x[i], c[i]}); } for (int w : v) f[w][0] = 0; f[0][0] = 0; for (int i = 0; i <= k; i++) { priority_queue<pair<double, int>> q; if (i != 0) { for (int j = 0; j < n; j++) { for (auto w : g[j]) { f[j][i] = min(d[w.first][i] + w.second, f[j][i]); } //cout << j << " " << i << " " << f[j][i] << '\n'; } } for (int j = 0; j < n; j++) { if (j != h) { q.push({-f[j][i], j}); } } while (!q.empty()) { double x = -q.top().first; int u = q.top().second; q.pop(); if (f[u][i] != x || u == h) continue; //cout << u << " " << i << " " << x << " " << f[0][0] << " 328762836" << '\n'; for (auto w : g[u]) { if (f[w.first][i] > f[u][i] + w.second) { f[w.first][i] = f[u][i] + w.second; q.push({-f[w.first][i], w.first}); } } } if (i == k) break; for (int j = 0; j < n; j++) { if (a[j] <= 1) d[j][i + 1] = f[j][i]; else if (a[j] == 2) d[j][i + 1] = f[j][i] / 2; } } double res = 1e18; for (int j = 0; j <= k; j++) { res = min(res, f[h][j]); } if (res > 1e17) return -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...