Submission #1178913

#TimeUsernameProblemLanguageResultExecution timeMemory
1178913GurbanCyberland (APIO23_cyberland)C++17
15 / 100
3096 ms9612 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const double inf = 2e14; const int maxn=1e5+5; vector<pair<int,double>>E[maxn]; vector<double>Dijkstra(int n,vector<int>s, vector<double>ds){ priority_queue<pair<double,int>>p; vector<bool>vis(n,0); for(auto i : s){ p.push({-ds[i], i}); } while(!p.empty()){ int x = p.top().second; p.pop(); if(vis[x]) continue; vis[x] = 1; for(auto i : E[x]){ int to = i.first; double w = i.second; if(ds[to] > ds[x] + w){ ds[to] = ds[x] + w; p.push({-ds[to], to}); } } } return ds; } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { vector<int>twos; for(int i = 0;i < N;i++){ E[i].clear(); if(arr[i] == 2) twos.push_back(i); } 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]}); } vector<int>now; now.push_back(0); vector<double>dis(N,inf); dis[0] = 0; for(int i = 1;i < N;i++){ if(arr[i] == 0){ now.push_back(i); dis[i] = 0; } } double ans = inf; for(int i = 1;i <= K;i++){ dis = Dijkstra(N, now, dis); ans = min(ans, dis[H]); if(arr[H] == 2) ans = min(ans, dis[H] / 2); vector<double>ndis(N,inf); for(auto t : twos){ double nw = dis[t] / 2; for(auto j : E[t]){ int to = j.first; double w = j.second; ndis[to] = min(ndis[to],nw + w); } } vector<int>ns; for(int j = 0;j < N;j++){ if(ndis[j] < inf-2){ ns.push_back(j); } } now = ns; dis = ndis; } dis = Dijkstra(N, now, dis); ans = min(ans, dis[H]); if(ans >= inf-2) ans = -1; 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...