社区讨论
MLE
P114101迷宫参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mhjt4mwm
- 此快照首次捕获于
- 2025/11/04 08:04 4 个月前
- 此快照最后确认于
- 2025/11/04 08:04 4 个月前
MLE求条!
CPP#include<bits/stdc++.h>
#define FOR(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
int z[1009][1009],ans[1009][1009],n;
int zx[]= {0,0,1,0,-1};
int zy[]= {0,1,0,-1,0};
struct node {
int x,y;
};
queue<node>q;
void bfs (int x,int y,int ans2) {
while(!q.empty()) {
int x=q.front().x;
int y=q.front().y;
ans[x][y]=ans2;
q.pop();
FOR(i,1,4) {
int xx=x+zx[i],yy=y+zy[i];
if(ans[xx][yy]==-1) {
q.push((node) {
xx,yy
});
}
}
}
return;
}
int dfs (int x,int y,int c) {
int maxx=0,sum=0;
ans[x][y]=-1;
FOR(i,1,4) {
int xx=x+zx[i],yy=y+zy[i];
if(xx>=1&&yy>=1&&xx<=n&&yy<=n)
if(z[xx][yy]!=z[x][y]&&ans[xx][yy]!=-1) {
sum++;
maxx+=dfs(xx,yy,c+1);
}
}
if(sum==0)sum++;
int z=max(maxx-(sum-1)*c,c);
if(c==1) {
q.push((node){
x,y
});
bfs(x,y,z);
}
return z;
}
int main () {
int m,x,y;
cin>>n>>m;
FOR(i,1,n)FOR(j,1,n)scanf("%1d",&z[i][j]);
FOR(i,1,n)
FOR(j,1,n)
if(ans[i][j]==0)
x=dfs(i,j,1);
FOR(i,1,m) {
cin>>x>>y;
cout<<ans[x][y]<<"\n";
}
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...