Submission #982522

#TimeUsernameProblemLanguageResultExecution timeMemory
982522KenjikrabCyberland (APIO23_cyberland)C++17
100 / 100
402 ms172628 KiB
#include "cyberland.h" #include<bits/stdc++.h> #define fi first #define se second #define db long double using namespace std; int const n_max=1e5+10; db len[n_max][100]; vector<pair<int,db>> node[n_max]; bitset<n_max> canend; db ans=DBL_MAX; void reset(int N,int K) { for(int i=0;i<=N;i++)for(int j=0;j<=K;j++)len[i][j]=DBL_MAX; for(int i=0;i<=N;i++)node[i].clear(); canend.reset(); ans=DBL_MAX; } double solve(int N, int M, int K, int H, vector<int> x, vector<int> y, vector<int> c, vector<int> arr) { K=min(K,99); if(H==0||arr[H]==0)return 0; reset(N,K); for(int i=0;i<M;i++) { node[x[i]].push_back({y[i],(db)c[i]}); node[y[i]].push_back({x[i],(db)c[i]}); } canend[0]=true; queue<int> qq; qq.push(0); while(!qq.empty()) { int u=qq.front(); qq.pop(); for(auto it:node[u]) { int v=it.fi; if(canend[v]||v==H)continue; canend[v]=true; qq.push(v); } } priority_queue<pair<pair<db,db>,pair<int,int>>,vector<pair<pair<db,db>,pair<int,int>>>, greater<pair<pair<db,db>,pair<int,int>>>> q; if(arr[H]!=2&&K>=1)q.push({{0,1},{K,H}}); else q.push({{0,0.5},{K-1,H}}); //for(int i=0;i<=K;i++)len[H][i]=0; while(!q.empty()) { db l=q.top().fi.fi,cost=q.top().fi.se; int k=q.top().se.fi,u=q.top().se.se; q.pop(); //cout<<l<<" "<<cost<<" "<<k<<" "<<u<<endl; if(l>ans)continue; if(len[u][k]<l)continue; if(u==H&&l!=0)continue; for(auto it:node[u]) { int v=it.fi; db nl=it.se*cost+l; if(nl>ans)continue; if(!canend[v])continue; if(v==0)ans=nl; if(arr[v]==0) { ans=nl; if(len[v][k]>nl) { len[v][k]=nl; continue; } } else if(arr[v]==2&&k>=1) { if(len[v][k-1]>nl) { len[v][k-1]=nl; q.push({{nl,cost/2},{k-1,v}}); //cout<<v<<endl; } continue; } else { if(len[v][k]>nl) { len[v][k]=nl; q.push({{nl,cost},{k,v}}); //cout<<v<<endl; } } } } if(ans==DBL_MAX)return -1; else 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...