Submission #983344

#TimeUsernameProblemLanguageResultExecution timeMemory
983344crispxxCyberland (APIO23_cyberland)C++17
20 / 100
28 ms5716 KiB
#include "bits/stdc++.h" #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; using namespace std; typedef long long ll; typedef long double ld; typedef tree <int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef pair<double, int> pii; #define nl '\n' #define vt vector #define ar array #define pb push_back #define ff first #define ss second const int INF = INT_MAX; double solve(int N, int M, int K, int H, vt<int> x, vt<int> y, vt<int> c, vt<int> arr) { int n = N, m = M, k = K, h = H; vt<pair<int, int>> adj[n]; for(int i = 0; i < m; i++) { adj[x[i]].pb({y[i], c[i]}); adj[y[i]].pb({x[i], c[i]}); } vector<double> d(n, numeric_limits<double>::max()); priority_queue<pii, vt<pii>, greater<pii>> q; priority_queue<double, vt<double>, greater<double>> pq; d[0] = 0; q.push({0, 0}); while(!q.empty()) { int u = q.top().ss; double res = q.top().ff; q.pop(); if(u == h) { pq.push(res); } int ch = k; if(arr[u] == 2) ch--; for(auto &edge : adj[u]) { int v = edge.ff; int c = edge.ss; double nw = res + c; if(arr[v] == 0) nw = res; if(arr[v] == 2 && ch) { nw = res + c / 2.; ch--; } if(nw < d[v]) { d[v] = nw; q.push({nw, v}); } } } if(pq.empty()) return -1; return pq.top(); }
#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...