Submission #425459

#TimeUsernameProblemLanguageResultExecution timeMemory
425459ngraceShortcut (IOI16_shortcut)C++14
23 / 100
2064 ms3940 KiB
#include "shortcut.h" #include <vector> #include <queue> #include <utility> #include <iostream> #include <limits.h> #include <algorithm> using namespace std; #define v vector #define pii pair<int,int> #define fi first #define se second #define pq priority_queue v<v<long long>> adj; int N; long long floyd(){ for(int k=0;k<2*N;k++){ for(int i=0;i<2*N;i++){ for(int j=0;j<2*N;j++){ if(adj[i][k]==LLONG_MAX || adj[k][j]==LLONG_MAX) continue; if(adj[i][j] > adj[i][k] + adj[k][j]){ adj[i][j] = adj[i][k] + adj[k][j]; adj[j][i] = adj[i][k] + adj[k][j]; } } } } long long out=0; for(int i=0;i<2*N;i++){ for(int j=0;j<2*N;j++){ if(adj[i][j]>out && adj[i][j]!=LLONG_MAX) out=adj[i][j]; } } return out; } long long find_shortcut(int n, std::vector<int> l, std::vector<int> d, int c) { if(n<=500){ N=n; adj=v<v<long long>> (2*n,v<long long>(2*N, LLONG_MAX)); for(int i=0;i<n-1;i++){ adj[i][i+1] = l[i]; adj[i+1][i] = l[i]; adj[i][i]=0; } for(int i=0;i<n;i++){ adj[i][i+n] = d[i]; adj[i+n][i] = d[i]; adj[i+n][i+n]=0; } long long origDiam = floyd(); long long out=origDiam; v<v<long long>> large; for(int i=n;i<2*n;i++){ for(int j=i+1;j<2*n;j++){ large.push_back({-adj[i][j], i, j}); } } sort(large.begin(),large.end()); for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ long long diam=0; for(v<long long> it: large){ long long a=it[1]; long long b=it[2]; long long dist=adj[a][b]; long long dist2=adj[a][i]+adj[b][j]+c; long long dist3=adj[a][j]+adj[b][i]+c; if(dist2<dist) dist=dist2; if(dist3<dist) dist=dist3; if(dist>diam) diam=dist; if(diam>out) break; } if(diam<out) out=diam; } } return out; } }

Compilation message (stderr)

shortcut.cpp: In function 'long long int find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:87:1: warning: control reaches end of non-void function [-Wreturn-type]
   87 | }
      | ^
#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...