1 solutions
-
0
Guest MOD
-
0
数据范围特别小,所以直接打暴力即可
#include <iostream> #include <vector> #include <functional> using namespace std; #define int long long int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0}; void solve() { int n, m, k; cin >> n >> m >> k; vector<vector<int>> g(n + 1, vector<int>(m + 1)); for (int i = 0; i < k; i++) { int x, y; cin >> x >> y; g[x][y] = 1; } int res = 0, ans = 0; function<void(int, int)> dfs = [&](int x, int y) { for (int i = 0; i < 4; i++) { int nx = x + dx[i], ny = y + dy[i]; int nnx = nx + dx[i], nny = ny + dy[i]; if (nx <= 0 || ny <= 0 || nx > n || ny > m) continue; if (nnx <= 0 || nny <= 0 || nnx > n || nny > m) continue; if (g[nx][ny] == 1 && g[nnx][nny] == 0) { g[x][y] = 0; g[nx][ny] = 0; g[nnx][nny] = 1; res++; ans = max(ans, res); for (int ii = 1; ii <= n; ii++) for (int jj = 1; jj <= m; jj++) if (g[ii][jj] == 1) dfs(ii, jj); g[x][y] = 1; g[nx][ny] = 1; g[nnx][nny] = 0; res--; } } }; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) if (g[i][j] == 1) dfs(i, j); cout << k - ans << '\n'; } signed main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); int t; cin >> t; while (t--) solve(); }
- 1
Information
- ID
- 1491
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- (None)
- # Submissions
- 70
- Accepted
- 15
- Uploaded By