参考题解:https://www.luogu.com.cn/blog/user49173/solution-p1141 我的代码真的就差不多只有变量名不同了,结果点1wa其他re
# include <iostream>
# include <cstdio>
using namespace std;
int n,m,flag[1005][1005],ans[100005],a[1005][1005],f,r,d;
int dx[5]={0,1,-1,0,0},dy[5]={0,0,0,1,-1};
struct node{
int x,y;
}q[1000005];
int main () {
freopen("P1141_1.in","r",stdin);
int i,j,k,x,y,nx,ny;
char c;
cin >> n >> m;
for (i=1;i<=n;i++) {
c=getchar();
for (j=1;j<=n;j++){
c=getchar();
a[i][j]=c-'0';
if (a[i][j]==0)a[i][j]=-1;
}
}
for ( i=1;i<=n;i++ )
for ( j=1;j<=n;j++ ) {
if(flag[i][j]==0){
d++;
f=r=1;
flag[i][j]=d;
q[f].x=i;q[f].y=j;
while(f<=r) {
for ( k=1;k<=4;k++ ) {
nx=q[f].x+dx[k];
ny=q[f].y+dy[k];
if (nx>=1&&nx<=n&&ny>=1&&ny<=n&&
a[q[f].x][q[f].y]+a[nx][ny]==0&&
flag[nx][ny]==0) {
r++;
q[r].x=nx;q[r].y=ny;
flag[nx][ny]=d;
}
}
f++;
}
ans[d]=r;
}
}
for ( i=1;i<=m;i++ ) {
cin>>x>>y;
printf("%d\n",ans[flag[x][y]]);
}
return 0;
}