社区讨论

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 条回复,欢迎继续交流。

正在加载回复...