……………… 我瞬间感到我菜了…………
样例过了,第二个测试点………… 太长了
dalao们帮我康康哪挂了
万分感谢!!
#include<bits/stdc++.h>
using namespace std;
struct node
{
int x,y,step;
}
a[1000001];
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0},head,tail,n,m,ex,ey;
int ans[1000001]={0};
char s[1001][1001],o[1];
bool used[1001][1001];
void dfs(int r)
{
head=1;
tail=0;
a[1].x=ex;
a[1].y=ey;
int step=1;
tail++;
used[a[1].x][a[1].y]=r;
while(head<=tail)
{
for(int i=0;i<4;i++)
{
int xx=a[head].x+dx[i];
int yy=a[head].y+dy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=n&&s[xx][yy]!=s[a[head].x][a[head].y]&&used[xx][yy]==0)
{
tail++;
a[tail].x=xx;
used[xx][yy]=r;
a[tail].y=yy;
step++;
}
}
head++;
}
ans[r]=step;
}
int main()
{
cin>>n>>m;
gets(o);
for(int i=1;i<=n;i++)
gets(s[i]+1);
for(int i=1;i<=m;i++)
{
scanf("%d %d",&ex,&ey);
if(used[ex][ey]!=0)
printf("%d\n",ans[used[ex][ey]]);
else{
dfs(i);
printf("%d\n",ans[i]);
}
}
return 0;
}