Submission #983213

#TimeUsernameProblemLanguageResultExecution timeMemory
983213vjudge1Cyberland (APIO23_cyberland)C++17
0 / 100
1979 ms59820 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define double long double const ll NMAX = 1e5 + 5; vector<pair<ll,ll> > g[NMAX]; vector<vector<double> > dis(NMAX, vector<double>(31) ); double solve(int n, int m, int k, int h, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr) { for(long long i = 1; i <= n; i++){ g[i].clear(); for(long long j = 0; j <= 30; j++) dis[i][j] = 1e18; } h++; for(long long i = 0; i < m; i++){ g[x[i] + 1].push_back({y[i] + 1, c[i]}); g[y[i] + 1].push_back({x[i] + 1, c[i]}); } priority_queue<tuple<double,long long,long long>, vector<tuple<double,long long,long long> >, greater<tuple<double,long long,long long> > > q; q.push({0, 1, 0}); dis[1][0] = 0; while(!q.empty()){ auto [dist, v, u] = q.top(); q.pop(); if(dist > dis[v][u]) continue; for(auto [to, cost] : g[v]){ if(arr[to - 1] == 2 and u < 30 and (dist + cost) / 2 < dis[to][u + 1]){ dis[to][u + 1] = ((double)dist + cost) / 2.0; q.push({dis[to][u + 1], to, u + 1}); } if(arr[to - 1] == 0 and dis[to][u] > 0){ dis[to][u] = 0; q.push({dis[to][u], to, u}); } if(dist + cost < dis[to][u]){ dis[to][u] = dist + cost; q.push({dis[to][u], to, u}); } } } double ans = 1e18; for(long long i = 0; i <= k; i++) ans = min(ans, dis[h][i]); return ans; }
#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...