weizhenkai @ 2024-11-13 22:05:30
#include<bits/stdc++.h>
using namespace std;
struct node{
int p,q;
};
queue< node > que;
vector< int > v[1000][1000];
int n,m,a[1000][1000],xx,yy,cnt,vis[1000][1000],b[1000][1000];
int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
void bfs(int x,int y)
{
v[x][y].push_back(x*1001+y);
node s;
s.p=x;s.q=y;
que.push(s);
while(!que.empty())
{
cnt++;
node nn;
nn=que.front();que.pop();
for(int i=0;i<=3;i++)
{
node nxt=nn;
nxt.p+=d[i][0];
nxt.q+=d[i][1];
if(vis[nxt.p][nxt.q]==1||nxt.p<1||nxt.p>n||nxt.q<1||nxt.q>n)continue;
if(a[nxt.p][nxt.q]==a[nn.p][nn.q])continue;
que.push(nxt);
v[x][y].push_back(nxt.p*1001+nxt.q);
vis[nxt.p][nxt.q]=1;
}
}
}
void he(int x,int y)
{
b[x][y]=v[x][y].size()-1;
for(int i=1;i<=v[x][y].size()-1;i++)
{
b[v[x][y][i]/1001][v[x][y][i]%1001]=v[x][y].size()-1;
}
}
int main()
{
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
scanf("%1d",&a[i][j]);
}
}
while(m--)
{
cin>>xx>>yy;
if(b[xx][yy]==0){bfs(xx,yy);he(xx,yy);}
cout<<b[xx][yy]<<endl;
}
return 0;
}