Submission #756232

#TimeUsernameProblemLanguageResultExecution timeMemory
756232activedeltorreCyberland (APIO23_cyberland)C++17
97 / 100
3102 ms67548 KiB
#include <vector> #include <iostream> #include <queue> #include <iomanip> #pragma GCC optimize ("Ofast") #pragma GCC optimize(" unroll-loops") #include "cyberland.h" using namespace std; double inf=1e18; double dp[100005][75]; vector<pair<int,int> >adj[100005]; priority_queue<pair<int,pair<double,int> > >pq; double solve(int n,int m,int k,int fs,vector<int>x,vector<int>y,vector<int>cst,vector<int>arr) { int i,j; k=min(k,70); for(i=0; i<m; i++) { adj[x[i]].push_back({y[i],cst[i]}); adj[y[i]].push_back({x[i],cst[i]}); } for(i=0; i<n; i++) { for(j=0; j<=k; j++) { dp[i][j]=inf; } } dp[0][0]=0; pq.push({0,{0,0}}); int layer,curr,vec; double timp,cost; while(pq.size()) { layer=pq.top().first; timp=pq.top().second.first; curr=pq.top().second.second; pq.pop(); if(dp[curr][layer]==-timp && curr!=fs) { for(i=0; i<adj[curr].size(); i++) { vec=adj[curr][i].first; cost=adj[curr][i].second; if(arr[vec]==0 && dp[vec][layer]!=0) { dp[vec][layer]=0; pq.push({layer,{0,vec}}); } else if(dp[curr][layer]+cost<dp[vec][layer]) { dp[vec][layer]=dp[curr][layer]+cost; pq.push({layer,{-dp[vec][layer],vec}}); } if(arr[vec]==2 && dp[curr][layer]+cost<dp[vec][layer+1]*2) { dp[vec][layer+1]=(dp[curr][layer]+cost)/2; pq.push({layer+1,{-dp[vec][layer+1],vec}}); } } } } double sol=inf; for(i=0; i<=k; i++) { sol=min(sol,dp[fs][i]); } for(i=0;i<=n;i++) { adj[i].clear(); } if(sol==inf) { return -1; } return sol; } /* int main() { int T; cin>>T; while (T--) { int N,M,K,H; cin>>N>>M>>K>>H; std::vector<int> x(M); std::vector<int> y(M); std::vector<int> c(M); std::vector<int> arr(N); for (int i=0; i<N; i++) cin>>arr[i]; for (int i=0; i<M; i++) { cin>>x[i]>>y[i]>>c[i]; } cout<<setprecision(12)<<solve(N, M, K, H, x, y, c, arr)<<'\n'; } } */

Compilation message (stderr)

cyberland.cpp:6:37: warning: bad option '-f unroll-loops' to pragma 'optimize' [-Wpragmas]
    6 | #pragma GCC optimize(" unroll-loops")
      |                                     ^
In file included from cyberland.cpp:7:
cyberland.h:3:122: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
    3 | 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);
      |                                                                                                                          ^
cyberland.h:3:122: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
cyberland.cpp:13:94: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
   13 | double solve(int n,int m,int k,int fs,vector<int>x,vector<int>y,vector<int>cst,vector<int>arr)
      |                                                                                              ^
cyberland.cpp: In function 'double solve(int, int, int, int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
cyberland.cpp:41:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |             for(i=0; i<adj[curr].size(); i++)
      |                      ~^~~~~~~~~~~~~~~~~
#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...