#include <bits/stdc++.h>
using namespace std;
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
vector<vector<int>> a, col;
vector<vector<int>> dp[2];
queue<pair<int, int>> que;
int n, m;
bool inside(int x, int y) {
return x >= 0 && x < n && y >= 0 && y < m;
}
void impossible() {
cout << "No\n"; exit(0);
}
void place(int i, int j, int d) {
for (int k = 0; k < 4; k++)
if (k != d) {
int x = i + dx[k], y = j + dy[k];
if (!inside(x, y) || col[x][y])
impossible();
col[x][y] = 2; que.emplace(x, y);
}
col[i][j] = 2;
}
void bfs() {
int i, j;
while (que.size()) {
tie(i, j) = que.front(); que.pop();
for (int k = 0; k < 4; k++) {
int x = i + dx[k], y = j + dy[k];
if (inside(x, y) && abs(col[x][y]) == 1)
place(x, y, k ^ 1);
}
}
}
void dfs(int i, int j, int p) {
col[i][j] = -1;
dp[0][i][j] = dp[1][i][j] = -1e18;
for (int k = 0; k < 4; k++) {
if (k == p) continue;
int x = i + dx[k] * 2, y = j + dy[k] * 2;
if (!inside(x, y)) continue;
if (col[x][y] == -1) {
place(i, j, k); bfs();
}
if (col[x][y] == 1) dfs(x, y, k ^ 1);
}
for (int d = 0; d < 4; d++) {
int tmp = a[i][j];
for (int k = 0; k < 4; k++)
if (k == d) {
int x = i + dx[k] * 2, y = j + dy[k] * 2;
if (k != p && inside(x, y))
tmp += max(dp[0][x][y], dp[1][x][y]);
} else {
tmp += a[i + dx[k]][j + dy[k]];
int x = i + dx[k] * 2, y = j + dy[k] * 2;
if (k != p && inside(x, y))
tmp += dp[0][x][y];
}
dp[d != p][i][j] = max(dp[d != p][i][j], tmp);
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> m;
a.resize(n); col.resize(n);
dp[0].resize(n); dp[1].resize(n);
for (int i = 0; i < n; i++) {
a[i].resize(m); col[i].resize(m);
dp[0][i].resize(m); dp[1][i].resize(m);
for (int &x : a[i]) cin >> x;
}
for (int i = 0; i < n; i++) {
que.emplace(i, -1); que.emplace(i, m);
}
for (int j = 0; j < m; j++) {
que.emplace(-1, j); que.emplace(n, j);
}
int k; cin >> k;
while (k--) {
int x, y; cin >> x >> y;
if (col[x][y]) impossible();
col[x][y] = 1; que.emplace(x, y);
}
for (int i = 1; i < n; i++)
for (int j = 0; j < m; j++) {
if (col[i][j] != 1) continue;
if (j > 0 && col[i - 1][j - 1] == 1) {
place(i, j, 0);
place(i - 1, j - 1, 1);
}
if (j + 1 < m && col[i - 1][j + 1] == 1) {
place(i, j, 0);
place(i - 1, j + 1, 1);
}
}
bfs(); int res = 0;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (col[i][j] == 1) {
dfs(i, j, -1);
if (col[i][j] == -1)
res += dp[1][i][j];
}
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
if (col[i][j] == 2) res += a[i][j];
cout << res;
}
Compilation message
covering.cpp: In function 'void dfs(int, int, int)':
covering.cpp:46:33: warning: overflow in conversion from 'double' to '__gnu_cxx::__alloc_traits<std::allocator<int>, int>::value_type' {aka 'int'} changes value from '-1.0e+18' to '-2147483648' [-Woverflow]
46 | dp[0][i][j] = dp[1][i][j] = -1e18;
| ^~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
468 KB |
Output is correct |
2 |
Correct |
2 ms |
724 KB |
Output is correct |
3 |
Correct |
7 ms |
1876 KB |
Output is correct |
4 |
Correct |
23 ms |
5076 KB |
Output is correct |
5 |
Correct |
66 ms |
16048 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
468 KB |
Output is correct |
2 |
Correct |
2 ms |
724 KB |
Output is correct |
3 |
Correct |
7 ms |
1924 KB |
Output is correct |
4 |
Correct |
21 ms |
5124 KB |
Output is correct |
5 |
Correct |
72 ms |
16136 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
468 KB |
Output is correct |
2 |
Correct |
3 ms |
724 KB |
Output is correct |
3 |
Correct |
7 ms |
1856 KB |
Output is correct |
4 |
Correct |
20 ms |
5064 KB |
Output is correct |
5 |
Correct |
68 ms |
16156 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
340 KB |
Output is correct |
2 |
Correct |
1 ms |
340 KB |
Output is correct |
3 |
Correct |
4 ms |
1108 KB |
Output is correct |
4 |
Correct |
2 ms |
852 KB |
Output is correct |
5 |
Correct |
7 ms |
1960 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
212 KB |
Output is correct |
2 |
Correct |
0 ms |
212 KB |
Output is correct |
3 |
Correct |
1 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
0 ms |
212 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
468 KB |
Output is correct |
2 |
Correct |
2 ms |
724 KB |
Output is correct |
3 |
Correct |
7 ms |
1876 KB |
Output is correct |
4 |
Correct |
23 ms |
5076 KB |
Output is correct |
5 |
Correct |
66 ms |
16048 KB |
Output is correct |
6 |
Correct |
1 ms |
468 KB |
Output is correct |
7 |
Correct |
2 ms |
724 KB |
Output is correct |
8 |
Correct |
7 ms |
1924 KB |
Output is correct |
9 |
Correct |
21 ms |
5124 KB |
Output is correct |
10 |
Correct |
72 ms |
16136 KB |
Output is correct |
11 |
Correct |
1 ms |
468 KB |
Output is correct |
12 |
Correct |
3 ms |
724 KB |
Output is correct |
13 |
Correct |
7 ms |
1856 KB |
Output is correct |
14 |
Correct |
20 ms |
5064 KB |
Output is correct |
15 |
Correct |
68 ms |
16156 KB |
Output is correct |
16 |
Correct |
0 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
4 ms |
1108 KB |
Output is correct |
19 |
Correct |
2 ms |
852 KB |
Output is correct |
20 |
Correct |
7 ms |
1960 KB |
Output is correct |
21 |
Correct |
2 ms |
468 KB |
Output is correct |
22 |
Correct |
3 ms |
844 KB |
Output is correct |
23 |
Correct |
7 ms |
1916 KB |
Output is correct |
24 |
Correct |
20 ms |
5076 KB |
Output is correct |
25 |
Correct |
69 ms |
16152 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
468 KB |
Output is correct |
2 |
Correct |
2 ms |
724 KB |
Output is correct |
3 |
Correct |
7 ms |
1876 KB |
Output is correct |
4 |
Correct |
23 ms |
5076 KB |
Output is correct |
5 |
Correct |
66 ms |
16048 KB |
Output is correct |
6 |
Correct |
1 ms |
468 KB |
Output is correct |
7 |
Correct |
2 ms |
724 KB |
Output is correct |
8 |
Correct |
7 ms |
1924 KB |
Output is correct |
9 |
Correct |
21 ms |
5124 KB |
Output is correct |
10 |
Correct |
72 ms |
16136 KB |
Output is correct |
11 |
Correct |
1 ms |
468 KB |
Output is correct |
12 |
Correct |
3 ms |
724 KB |
Output is correct |
13 |
Correct |
7 ms |
1856 KB |
Output is correct |
14 |
Correct |
20 ms |
5064 KB |
Output is correct |
15 |
Correct |
68 ms |
16156 KB |
Output is correct |
16 |
Correct |
0 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
4 ms |
1108 KB |
Output is correct |
19 |
Correct |
2 ms |
852 KB |
Output is correct |
20 |
Correct |
7 ms |
1960 KB |
Output is correct |
21 |
Correct |
0 ms |
212 KB |
Output is correct |
22 |
Correct |
0 ms |
212 KB |
Output is correct |
23 |
Correct |
1 ms |
212 KB |
Output is correct |
24 |
Correct |
0 ms |
212 KB |
Output is correct |
25 |
Correct |
0 ms |
212 KB |
Output is correct |
26 |
Correct |
2 ms |
468 KB |
Output is correct |
27 |
Correct |
3 ms |
844 KB |
Output is correct |
28 |
Correct |
7 ms |
1916 KB |
Output is correct |
29 |
Correct |
20 ms |
5076 KB |
Output is correct |
30 |
Correct |
69 ms |
16152 KB |
Output is correct |
31 |
Correct |
114 ms |
23448 KB |
Output is correct |
32 |
Correct |
63 ms |
16404 KB |
Output is correct |
33 |
Correct |
79 ms |
20112 KB |
Output is correct |
34 |
Correct |
65 ms |
16336 KB |
Output is correct |
35 |
Correct |
91 ms |
22812 KB |
Output is correct |