翻了一下 2021 年的代码,下了第一个测试点,发现 Windows 输出正确,但是洛谷 WA
#include <bits/stdc++.h>
using namespace std;
int n, m, s[500001], g[1001][1001];
bool t[1001][1001];
void dfs(int x, int y, int k, bool ist) {
if (x <= 0 || x > n || y <= 0 || y > n || ist != t[x][y] || g[x][y] != -1) return;
++s[k];
g[x][y] = k;
dfs(x - 1, y, k, !ist);
dfs(x + 1, y, k, !ist);
dfs(x, y - 1, k, !ist);
dfs(x, y + 1, k, !ist);
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
getchar();
for (int j = 1; j <= n; ++j) {
char ch = getchar();
if (ch == '1') t[i][j] = true;
else t[i][j] = false;
g[i][j] = -1;
}
}
/* for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) cout << t[i][j] << ' ';
cout << endl;
}*/
for (int i = 1; i <= m; ++i) {
int x, y;
cin >> x >> y;
if (g[x][y] != -1) s[i] = s[g[x][y]];
else dfs(x, y, i, t[x][y]);
}
for (int i = 1; i <= m; ++i) cout << s[i] << endl;
}