Submission #351443

#TimeUsernameProblemLanguageResultExecution timeMemory
351443beksultan04Shortcut (IOI16_shortcut)C++14
0 / 100
17 ms23788 KiB
#include "shortcut.h" #ifndef EVAL #include "grader.cpp" #endif // EVAL #include <bits/stdc++.h> using namespace std; #define lol long long #define pii pair<int,int> #define OK puts("OK"); #define NO puts("NO"); #define YES puts("YES"); #define fr first #define sc second #define ret return #define scanl(a) scanf("%lld",&a); #define scanll(a,b) scanf("%lld %lld",&a, &b); #define scanlll(a,b,c) scanf("%lld %lld %lld",&a,&b,&c); #define scan1(a) scanf("%d",&a); #define scan2(a,b) scanf("%d %d",&a, &b); #define scan3(a,b,c) scanf("%d %d %d",&a,&b,&c); #define all(s) s.begin(),s.end() #define allr(s) s.rbegin(),s.rend() #define pb push_back #define sz(v) (int)v.size() #define endi puts(""); #define eps 1e-12 const lol INF = 1e17+1; lol dia,iz,dis[1000001]; vector <pii> g[1000001]; lol find_shortcut(int n, vector<int> l, vector<int> d, int c){ int i,j,x=0,y=0,pos=0; lol ans = -1,mx = 0; vector <pair<lol,pii> > v; for (i=0;i<n;++i){ mx = d[i]; for (j=i+1;j<n;++j){ mx += l[j-1]; if (mx+d[j] > ans){ ans = mx+d[j]; x = i; y = j; } } } for (i=0;i<n;++i){ if (d[i] > 0){ g[i].pb({i+n,d[i]}); g[i+n].pb({i,d[i]}); } if (i+1 < n){ g[i].pb({i+1,l[i]}); g[i+1].pb({i,l[i]}); } } if (ans != -1){ g[x].pb({y,c}); g[y].pb({x,c}); } { set <pii> s; int start = 0; for (i=0;i<n*2;++i)dis[i] = INF; s.insert({0,start}); dis[start] = 0; while (!s.empty()){ int x = s.begin()->sc,cost = s.begin()->fr; s.erase(s.begin()); for (pii to: g[x]){ if (to.sc+cost < dis[to.fr]){ s.erase({dis[to.fr],to.fr}); dis[to.fr] = to.sc+cost; s.insert({dis[to.fr],to.fr}); } } } ans =0 ; for (i=0;i<n*2;++i){ if (dis[i] > ans && dis[i] != INF){ ans = dis[i]; iz = i; } dis[i] = INF; } } { set <pii> s; int start = iz; for (i=0;i<n*2;++i)dis[i] = INF; s.insert({0,start}); dis[start] = 0; while (!s.empty()){ int x = s.begin()->sc; lol cost = s.begin()->fr; s.erase(s.begin()); for (pii to: g[x]){ if (to.sc+cost < dis[to.fr]){ s.erase({dis[to.fr],to.fr}); dis[to.fr] = to.sc+cost; s.insert({dis[to.fr],to.fr}); } } } ans =0 ; for (i=0;i<n*2;++i){ if (dis[i] > ans && dis[i] != INF){ ans = dis[i]; } } } ret ans; }

Compilation message (stderr)

shortcut.cpp: In function 'long long int find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:32:21: warning: unused variable 'pos' [-Wunused-variable]
   32 |     int i,j,x=0,y=0,pos=0;
      |                     ^~~
#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...