제출 #1194854

#제출 시각아이디문제언어결과실행 시간메모리
1194854dzuizzCyberland (APIO23_cyberland)C++20
49 / 100
544 ms47172 KiB
#include "cyberland.h" #include <bits/stdc++.h> #define ld long double using namespace std; constexpr int N=1e5+5,K=50; constexpr ld INF=LDBL_MAX; int n,m,k,h; vector<vector<pair<int,int>>> g; vector<vector<ld>> di; vector<bool> vi; vector<int> v; priority_queue<pair<ld,pair<int,int>>> pq; // (-d,i,j) void find0(int u){ if(v[u]==0) pq.emplace(0.0,make_pair(u,0)),di[u][0]=0; vi[u]=1; for(auto&[w,v]:g[u]) if(!vi[v]&&v!=h) find0(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> _v) { n=_n,m=_m,k=min(_k,49),h=_h,v=_v; di=vector<vector<ld>>(n,vector<ld>(k+1,INF)); g=vector<vector<pair<int,int>>>(n); vi=vector<bool>(n,0); for(int i=0;i<m;++i) g[x[i]].emplace_back(c[i],y[i]), g[y[i]].emplace_back(c[i],x[i]); pq.emplace(0.0,make_pair(0,0)); di[0][0]=0.0; find0(0); while(pq.size()){ auto [d,p]=pq.top(); pq.pop(); int i=p.first,j=p.second; d=-d; if(i==h) continue; if(d>di[i][j]) continue; for(auto&[w,x]:g[i]){ if(v[x]==0){ if(di[x][j]>0) pq.emplace(-(di[x][j]=0.0),make_pair(i,j)); }else if(v[x]==1){ ld nd=d+(ld)w; if(nd<di[x][j]) pq.emplace(-(di[x][j]=nd),make_pair(x,j)); }else{ // v[x]==2 double nd=d+(ld)w; if(nd<di[x][j]) pq.emplace(-(di[x][j]=d+(ld)w),make_pair(x,j)); if(j<k&&nd/2.0<di[x][j+1]) pq.emplace(-(di[x][j+1]=nd/2.0),make_pair(x,j+1)); /* ld nd=d/2.0; for(int l=j+1;l<=k;++l){ if(nd+(ld)w<di[x][l]) pq.emplace(-(di[x][l]=nd+(ld)w),make_pair(x,l)); nd=nd/2.0+min_nx[x]; } */ } } } /* for(int i=0;i<n;++i){ for(int j=0;j<=k;++j) cerr<<di[i][j]<<" "; cerr<<'\n'; } */ ld ans=INF; for(int j=0;j<=k;++j) ans=min(ans,di[h][j]); return ans==INF?-1.0: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...