# | TimeUTC-0 | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
602103 | Yazan_Alattar | Shortcut (IOI16_shortcut) | C++14 | 0 ms | 0 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shortcut.h"#include <bits/stdc++.h>using namespace std;const int N=3e3+100;long long vis[N][N];vector<long long> dd;vector<pair<long long,int>> g[N];long long cc;int nn;void dfs(int u,int v){ for(auto x:g[u]){ if(x.first+vis[u][v]<vis[x.second][v]){ vis[x.second][v]=vis[u][v]+x.first; dfs(x.second,v); } }}long long con(int l,int r){ g[l].push_back({cc,r}); g[r].push_back({cc,l}); for(int i=0;i<nn;i++){ for(int j=0;j<nn;j++){ vis[i][j]=1e18; } } for(int i=0;i<nn;i++){ vis[i][i]=0; dfs(i,i); } long long ret=0; for(int i=0;i<nn;i++){ for(int j=0;j<nn;j++){ ret=max(ret,vis[i][j]+dd[i]+dd[j]); } } g[l].pop_back(); g[r].pop_back(); return ret;}long long find_shortcut(int n,vector<int> l,vector<int> d,int c){ nn=n; cc=c; for(auto x:d)dd.push_back(x); for(int i=0;i<n;i++){ g[i].clear(); } /* for(int i=0;i<n;i++){ g[i].push_back({d[i],i+n}); g[i+n].push_back({d[i],i}); } */ for(int i=0;i<n-1;i++){ g[i].push_back({l[i],i+1}); g[i+1].push_back({l[i],i}); } long long ans=1e18; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ long long me=con(i,j); ans=min(ans,me); } } return ans;}/*4 1010 20 200 40 0 304 12 2 21 10 10 1*/