#include <bits/stdc++.h>
#include "wombats.h"
#define F first
#define S second
using namespace std;
const int N = 5e3 + 10 , M = 2e2 + 10 , Sq = 35 , inf = 1e9 + 10 , TOF = N / Sq + 10;
int r , c , h[N][M] , v[N][M] , nex[TOF][M][M] , adj[M][M] , ans[M][M] , dis[N][M] , dis2[TOF][M] , las;
bool is_update , marked[N][M];
void Dij(int num , int Qs)
{
int Ps = num * Sq , R = min(r - 1 , Ps + Sq);
las = max(las , num);
for(int i = Ps ; i <= R ; i++) for(int j = 0 ; j < c ; j++)
{
marked[i][j] = false;
dis[i][j] = inf;
}
dis[Ps][Qs] = 0;
priority_queue <pair<int , pair<int , int>> , vector <pair<int , pair<int , int>>> , greater<pair<int , pair<int , int>>>> pq;
pq.push({Ps , {0 , Qs}});
while(!pq.empty())
{
auto now = pq.top(); pq.pop();
int D = now.S.F , p = now.F , q = now.S.S;
if(marked[p][q])
continue;
marked[p][q] = true;
if(q + 1 < c && D + h[p][q] < dis[p][q + 1])
{
dis[p][q + 1] = D + h[p][q];
pq.push({p , {dis[p][q + 1] , q + 1}});
}
if(q - 1 >= 0 && D + h[p][q - 1] < dis[p][q - 1])
{
dis[p][q - 1] = D + h[p][q - 1];
pq.push({p , {dis[p][q - 1] , q - 1}});
}
if(p + 1 <= R && D + v[p][q] < dis[p + 1][q])
{
dis[p + 1][q] = D + v[p][q];
pq.push({p + 1 , {dis[p + 1][q] , q}});
}
}
for(int i = 0 ; i < c ; i++)
{
//cout << Ps << " " << Qs << " " << R << " " << i << " : " << dis[R][i] << endl;
nex[num][Qs][i] = dis[R][i];
}
if(num == 0)
{
for(int i = 0 ; i < c ; i++)
adj[Qs][i] = dis[Ps][i];
}
}
void Solve(int Qs)
{
for(int i = 0 ; i < las + 2 ; i++) for(int j = 0 ; j < c ; j++)
{
dis2[i][j] = inf;
}
for(int i = 0 ; i < c ; i++)
dis2[0][i] = adj[Qs][i];
for(int i = 0 ; i <= las ; i++)
{
for(int j = 0 ; j < c ; j++) for(int k = 0 ; k < c ; k++)
{
dis2[i + 1][k] = min(dis2[i + 1][k] , dis2[i][j] + nex[i][j][k]);
//cout << i << " " << j << " " << k << " " << dis2[i][j] << " " << nex[i][j][k] << endl;
}
}
for(int i = 0 ; i < c ; i++)
{
//cout << Qs << " " << i << " : " << dis2[las + 1][i] << endl;
ans[Qs][i] = dis2[las + 1][i];
}
}
void init(int R , int C , int H[5000][200] , int V[5000][200])
{
r = R; c = C;
for(int i = 0 ; i < R ; i++) for(int j = 0 ; j + 1 < C ; j++)
h[i][j] = H[i][j];
for(int i = 0 ; i + 1 < R ; i++) for(int j = 0 ; j < C ; j++)
v[i][j] = V[i][j];
for(int i = 0 ; i < R ; i += Sq) for(int j = 0 ; j < C ; j++)
Dij(i / Sq , j);
}
void changeH(int P , int Q , int W)
{
is_update = false;
h[P][Q] = W;
for(int j = 0 ; j < c ; j++)
{
Dij(P / Sq , j);
if(P > 0 && P % Sq == 0)
Dij((P - 1) / Sq , j);
}
}
void changeV(int P , int Q , int W)
{
is_update = false;
v[P][Q] = W;
for(int j = 0 ; j < c ; j++)
Dij(P / Sq , j);
}
int escape(int v1 , int v2)
{
if(!is_update)
{
for(int i = 0 ; i < c ; i++)
Solve(i);
is_update = true;
}
return ans[v1][v2];
}
Compilation message
grader.c: In function 'int main()':
grader.c:15:6: warning: variable 'res' set but not used [-Wunused-but-set-variable]
15 | int res;
| ^~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
14168 KB |
Output is correct |
2 |
Correct |
6 ms |
14172 KB |
Output is correct |
3 |
Correct |
53 ms |
15780 KB |
Output is correct |
4 |
Correct |
5 ms |
14680 KB |
Output is correct |
5 |
Correct |
5 ms |
14684 KB |
Output is correct |
6 |
Correct |
0 ms |
2392 KB |
Output is correct |
7 |
Correct |
1 ms |
2396 KB |
Output is correct |
8 |
Correct |
0 ms |
2396 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
4440 KB |
Output is correct |
2 |
Correct |
0 ms |
2396 KB |
Output is correct |
3 |
Correct |
1 ms |
2396 KB |
Output is correct |
4 |
Correct |
1 ms |
2652 KB |
Output is correct |
5 |
Correct |
1 ms |
2652 KB |
Output is correct |
6 |
Correct |
1 ms |
4444 KB |
Output is correct |
7 |
Correct |
2 ms |
2648 KB |
Output is correct |
8 |
Correct |
1 ms |
4444 KB |
Output is correct |
9 |
Correct |
1 ms |
2652 KB |
Output is correct |
10 |
Correct |
1 ms |
4444 KB |
Output is correct |
11 |
Correct |
38 ms |
5612 KB |
Output is correct |
12 |
Correct |
1 ms |
2652 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3023 ms |
5172 KB |
Output is correct |
2 |
Correct |
3125 ms |
3280 KB |
Output is correct |
3 |
Correct |
3704 ms |
3288 KB |
Output is correct |
4 |
Correct |
3497 ms |
3260 KB |
Output is correct |
5 |
Correct |
3604 ms |
3284 KB |
Output is correct |
6 |
Correct |
1 ms |
4444 KB |
Output is correct |
7 |
Correct |
0 ms |
2396 KB |
Output is correct |
8 |
Correct |
0 ms |
4444 KB |
Output is correct |
9 |
Correct |
17860 ms |
5252 KB |
Output is correct |
10 |
Correct |
1 ms |
8536 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
11 ms |
22492 KB |
Output is correct |
2 |
Correct |
11 ms |
22360 KB |
Output is correct |
3 |
Correct |
11 ms |
22364 KB |
Output is correct |
4 |
Correct |
28 ms |
23136 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2931 ms |
6996 KB |
Output is correct |
2 |
Correct |
3112 ms |
9232 KB |
Output is correct |
3 |
Correct |
3436 ms |
7208 KB |
Output is correct |
4 |
Correct |
3447 ms |
7000 KB |
Output is correct |
5 |
Correct |
3456 ms |
9044 KB |
Output is correct |
6 |
Correct |
10 ms |
22364 KB |
Output is correct |
7 |
Correct |
12 ms |
22364 KB |
Output is correct |
8 |
Correct |
14 ms |
22364 KB |
Output is correct |
9 |
Correct |
31 ms |
23156 KB |
Output is correct |
10 |
Correct |
5 ms |
15196 KB |
Output is correct |
11 |
Correct |
5 ms |
15196 KB |
Output is correct |
12 |
Correct |
39 ms |
16864 KB |
Output is correct |
13 |
Correct |
5 ms |
15196 KB |
Output is correct |
14 |
Correct |
6 ms |
15176 KB |
Output is correct |
15 |
Correct |
1 ms |
6492 KB |
Output is correct |
16 |
Correct |
1 ms |
6492 KB |
Output is correct |
17 |
Correct |
1 ms |
6492 KB |
Output is correct |
18 |
Correct |
1 ms |
6492 KB |
Output is correct |
19 |
Correct |
1 ms |
8540 KB |
Output is correct |
20 |
Correct |
1 ms |
8540 KB |
Output is correct |
21 |
Correct |
1 ms |
6492 KB |
Output is correct |
22 |
Correct |
2 ms |
8540 KB |
Output is correct |
23 |
Correct |
1 ms |
8540 KB |
Output is correct |
24 |
Correct |
1 ms |
6492 KB |
Output is correct |
25 |
Correct |
38 ms |
7492 KB |
Output is correct |
26 |
Correct |
2 ms |
6492 KB |
Output is correct |
27 |
Correct |
18004 ms |
7092 KB |
Output is correct |
28 |
Execution timed out |
20058 ms |
37788 KB |
Time limit exceeded |
29 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2879 ms |
6996 KB |
Output is correct |
2 |
Correct |
3055 ms |
8996 KB |
Output is correct |
3 |
Correct |
4019 ms |
7340 KB |
Output is correct |
4 |
Correct |
3432 ms |
7000 KB |
Output is correct |
5 |
Correct |
3365 ms |
7188 KB |
Output is correct |
6 |
Correct |
10 ms |
22364 KB |
Output is correct |
7 |
Correct |
11 ms |
22444 KB |
Output is correct |
8 |
Correct |
10 ms |
22364 KB |
Output is correct |
9 |
Correct |
29 ms |
23200 KB |
Output is correct |
10 |
Correct |
4 ms |
16732 KB |
Output is correct |
11 |
Correct |
4 ms |
16732 KB |
Output is correct |
12 |
Correct |
35 ms |
18260 KB |
Output is correct |
13 |
Correct |
4 ms |
16732 KB |
Output is correct |
14 |
Correct |
4 ms |
16548 KB |
Output is correct |
15 |
Correct |
12466 ms |
45996 KB |
Output is correct |
16 |
Execution timed out |
20067 ms |
44728 KB |
Time limit exceeded |
17 |
Halted |
0 ms |
0 KB |
- |