Submission #1274364

#TimeUsernameProblemLanguageResultExecution timeMemory
1274364vtnoo사이버랜드 (APIO23_cyberland)C++20
100 / 100
913 ms15396 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; const int MAXN=100000; const double INF=1e18; vector<vector<pair<int,double>>> adj; bool alc[MAXN]; void dfs(int u){ alc[u]=true; for(auto [v,t]:adj[u]){ if(!alc[v]){ dfs(v); } } } 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) { K=min(K, 80);// log_2(10^18), ten en cuenta el epsilon memset(alc, 0, sizeof(alc)); adj.clear(); adj.resize(N); for(int i=0;i<M;i++){ adj[x[i]].push_back({y[i], c[i]}); adj[y[i]].push_back({x[i], c[i]}); } dfs(0); if(!alc[H])return -1; vector<double> dp(N, INF); double ans=INF; for(int k=0;k<=K;k++){ priority_queue<pair<double, int>> pq; vector<double> ndp(N, INF); if(k==0){ pq.push({0,0}); }else{ for(int i=0;i<N;i++){ if(dp[i]==INF)continue; if(arr[i]==2){ pq.push({-dp[i]/2,i}); }else if(arr[i]==0)ndp[i]=0; } } while(!pq.empty()){ auto [d,u]=pq.top(); pq.pop(); if(u==H)continue; d=-d; for(auto [v,t]:adj[u]){ if(ndp[v]>d+t){ if(arr[v]==0)ndp[v]=0; else ndp[v]=d+t; pq.push({-ndp[v],v}); } } } ans=min(ans, ndp[H]); swap(dp, ndp); } 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...