Submission #919555

#TimeUsernameProblemLanguageResultExecution timeMemory
919555noyancanturkCyberland (APIO23_cyberland)C++17
0 / 100
2805 ms8400 KiB
#pragma GCC optimize("O3,unroll-loops") #ifndef Local #include "cyberland.h" #endif #include <bits/stdc++.h> using namespace std; const int lim=1e5+10; const double inf=2e30; using pii=pair<int,int>; using pdi=pair<double,int>; vector<pii> v[lim]; 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) { int n=N,m=M,k=K,h=H; for(int i=0;i<m;i++){ v[x[i]].push_back({y[i],c[i]}); v[y[i]].push_back({x[i],c[i]}); } double *dist[2]; dist[0]=new double[n]; dist[1]=new double[n]; for(int i=0;i<n;i++){ dist[0][i]=arr[i]?inf:0; } priority_queue<pdi,vector<pdi>,greater<pdi>>pq; for(int i=0;i<n;i++){ if(!arr[i]){ pq.push({0,i}); } } if(arr[0]){ dist[0][0]=0; pq.push({0,0}); } double ans=inf; for(int rp=0;rp<min(k,100);rp++){ ans=min(ans,dist[0][h]); for(int i=0;i<n;i++){ dist[1][i]=arr[i]?inf:0; } while(pq.size()){ auto nn=pq.top(); pq.pop(); double cost=nn.first; int node=nn.second; if(cost!=dist[0][node])continue; if(arr[node]==2){ dist[1][node]=min(dist[1][node],cost/2); } for(auto j:v[node]){ dist[1][j.first]=min(dist[1][j.first],cost+j.second); } } for(int i=0;i<n;i++){ pq.push({dist[1][i],i}); } swap(dist[0],dist[1]); } ans=min(ans,dist[0][h]); return ans; } #ifdef Local int main(){ cout<<solve(4, 4, 30, 3, {0, 0, 1, 2}, {1, 2, 3, 3}, {5, 4, 2, 4}, {1, 0, 2, 1})<<"\n"; } #endif
#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...