Submission #1114479

#TimeUsernameProblemLanguageResultExecution timeMemory
1114479adaawfCyberland (APIO23_cyberland)C++17
100 / 100
1786 ms164348 KiB
#include <iostream> #include <vector> #include <queue> #include <iomanip> using namespace std; vector<pair<int, int>> g[100005]; double f[100005][95], d[100005][95]; int dd[100005]; 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(); k = min(k, 90); for (int i = 0; i < n; i++) { dd[i] = 0; for (int j = 0; j <= k; j++) { f[i][j] = d[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]}); } queue<int> q; q.push(0); dd[0] = 1; while (!q.empty()) { int p = q.front(); q.pop(); if (p == h) continue; if (a[p] == 0) v.push_back(p); if (a[p] == 2) vv.push_back(p); for (auto w : g[p]) { if (dd[w.first] == 0) { dd[w.first] = 1; q.push(w.first); } } } if (dd[h] == 0) return -1; 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]) { if (w.first == h) continue; f[j][i] = min(d[w.first][i] + w.second, f[j][i]); } //cout << j << " " << i << " " << f[j][i] << " " << d[2][1] << " " << n << '\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; 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 (f[j][i] > 1e17) continue; 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...