#include "shortcut.h"
#include <bits/stdc++.h>
#define endl '\n'
#define here cerr<<"=========================================\n"
#define dbg(x) cerr<<#x<<": "<<x<<endl;
#define ll long long
#define pb push_back
#define popb pop_back
#define all(a_) a_.begin(),a_.end()
#define pll pair<ll,ll>
#define sc second
#define fi first
#define llinf 1000000000
#define ceri(a,l,r) {for(ll i = l;i<=r;i++) cerr<<a[i]<< " ";cerr<<endl;}
using namespace std;
#define maxn 505
ll n,c,tsz;
vector<pll> g[maxn];
ll dis[maxn];
ll dik[maxn][maxn];
ll naj(ll x){
for(ll i = 0;i<=tsz;i++) dik[x][i] = llinf;
dik[x][x] = 0;
priority_queue<pll> pq;
pq.push({0,x});
while(pq.size()){
ll u = pq.top().sc;
ll cur = -pq.top().fi;
pq.pop();
if(cur!=dik[x][u]) continue;
for(pll p : g[u]){
ll s = p.fi;
ll w = p.sc;
if(cur+w<dik[x][s]){
dik[x][s] = cur+w;
pq.push({-dik[x][s],s});
}
}
}
ll ans = 1;
for(ll i = 1;i<=tsz;i++) if(dik[x][i]>dik[x][ans]) ans = i;
return ans;
}
ll curdis[maxn];
void fix(ll x,ll i,ll j){
for(ll i = 1;i<=tsz;i++) curdis[i] = dik[x][i];
priority_queue<pll> pq;
pq.push({-curdis[i],i});
pq.push({-curdis[j],j});
while(pq.size()){
ll u = pq.top().sc;
ll cur = -pq.top().fi;
pq.pop();
if(cur!=curdis[u]) continue;
for(pll p : g[u]){
ll s = p.fi;
ll w = p.sc;
if(cur+w<curdis[s]){
curdis[s] = cur+w;
pq.push({-curdis[s],s});
}
}
}
}
ll find_shortcut(int N, vector<int> L, vector<int> D, int C)
{
n = N;
tsz = n;
c = C;
for(ll i = 1;i<n;i++){
g[i].pb({i+1,L[i-1]});
g[i+1].pb({i,L[i-1]});
}
for(ll i = 1;i<=n;i++) if(D[i-1]){
g[i].pb({++tsz,D[i-1]});
g[tsz].pb({i,D[i-1]});
}
for(ll i = 1;i<=tsz;i++){
naj(i);
}
ll ans = llinf;
for(ll i = 1;i<=n;i++){
for(ll j = i+1;j<=n;j++){
g[i].pb({j,c});
g[j].pb({i,c});
ll cur = 0;
for(ll k = 1;k<=tsz;k++){
fix(k,i,j);
for(ll e = 1;e<=tsz;e++) cur = max(cur,curdis[e]);
}
ans = min(ans,cur);
g[i].popb();
g[j].popb();
}
}
return ans;
}
/**
4 10
10 20 20
0 40 0 30
9 30
10 10 10 10 10 10 10 10
20 0 30 0 0 40 0 40 0
**/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
340 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
1 ms |
340 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
340 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
340 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
0 ms |
212 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
1 ms |
212 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
1 ms |
212 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
0 ms |
212 KB |
n = 2, 3 is a correct answer |
10 |
Incorrect |
0 ms |
340 KB |
n = 2, incorrect answer: jury 2000000001 vs contestant 1000000000 |
11 |
Halted |
0 ms |
0 KB |
- |