This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first
#define b second
//#define endl '\n'
#include "shortcut.h"
//vector<pair<llo,llo>> adj[1000001];
llo dist[6001][6001];
vector<pair<llo,llo>> adj[1000001];
void dfs(llo no,llo par=-1,llo no2=-1,llo lev=0){
dist[no2][no]=lev;
for(auto j:adj[no]){
if(j.a!=par){
dfs(j.a,no,no2,lev+j.b);
}
}
}
long long find_shortcut(int n, std::vector<int> aa, std::vector<int> bb, int cc)
{
for(int i=0;i<n-1;i++){
adj[i].pb({i+1,aa[i]});
adj[i+1].pb({i,aa[i]});
}
for(int i=0;i<n;i++){
adj[i].pb({n+i,bb[i]});
adj[n+i].pb({i,bb[i]});
}
for(int i=0;i<2*n;i++){
dfs(i,-1,i);
}
/*for(int i=0;i<2*n;i++){
for(int j=0;j<2*n;j++){
cout<<dist[i][j]<<",";
}
cout<<endl;
}*/
llo ans=1e18;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
llo ma=0;
for(int k=n;k<2*n;k++){
for(int l=k;l<2*n;l++){
ma=max(ma,min(dist[k][l],min(dist[k][i]+cc+dist[j][l],dist[k][j]+cc+dist[i][l])));
}
}
/*if(ma==0){
cout<<i<<":"<<j<<endl;
}*/
ans=min(ans,ma);
}
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |