Submission #1179186

#TimeUsernameProblemLanguageResultExecution timeMemory
1179186stdfloatCyberland (APIO23_cyberland)C++20
0 / 100
3095 ms2162688 KiB
#include <bits/stdc++.h> #include "cyberland.h" // #include "stub.cpp" using namespace std; #define ff first #define ss second #define pii pair<int, int> double solve(int n, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> a) { vector<pii> E[n]; for (int i = 0; i < M; i++) { E[x[i]].push_back({y[i], c[i]}); E[y[i]].push_back({x[i], c[i]}); } // queue<int> q; // vector<bool> vis(n); // q.push(0); vis[0] = true; // while (!q.empty()) { // int x = q.front(); q.pop(); // for (auto [i, w] : E[x]) { // if (!vis[i]) { // q.push(i); // vis[i] = true; // } // } // } // if (!vis[H]) return -1; priority_queue<pair<double, pii>> pq; vector<vector<double>> dis(n, vector<double>(K + 1, 1e18)); pq.push({0, {0, 0}}); dis[0][0] = 0; // for (int i = 0; i < n; i++) { // if ((!i || !a[i]) && vis[i]) { // dis[i][0] = 0; // pq.push({0, {i, 0}}); // } // } while (!pq.empty()) { auto [d, x] = pq.top(); d = -d; pq.pop(); if (x.ff == H || abs(d - dis[x.ff][x.ss]) > 1e-18) continue; for (auto [i, w] : E[x.ff]) { double nd = (!a[i] ? 0 : d + w); if (nd < dis[i][x.ss]) { dis[i][x.ss] = nd; pq.push({-nd, {i, x.ss}}); } if (a[i] == 2 && x.ss < K && nd < 2 * dis[i][x.ss]) { dis[i][x.ss + 1] = nd / 2; pq.push({-(nd / 2), {i, x.ss + 1}}); } } } double mn = 1e18; for (int i = 0; i <= K; i++) mn = min(mn, dis[H][i]); return (abs(mn - 1e18) < 1e18 ? -1 : mn); }
#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...