求dalao帮助!MLE + RE !
查看原帖
求dalao帮助!MLE + RE !
764583
LYH12061Oh_Dream楼主2022/12/11 11:24
#include<bits/stdc++.h>
using namespace std;
int n,m,x,mat[505][505],book[505][505],r,l,mid,cnt,maxx,ans,b[4][2]={1,0,0,1,-1,0,0,-1};
struct node{
	int x,y;
}f[25005];
void dfs(int x,int y,int D){
	book[x][y]=1;
	for(int i=0;i<=3;i++){
		int nx=x+b[i][0];
		int ny=y+b[i][1];
		if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&abs(mat[x][y]-mat[nx][ny])){
			dfs(nx,ny,D);
		}
	}
}
int check(int D){
	memset(book,0,sizeof(book));
	dfs(f[1].x,f[1].y,D);
	for(int i=1;i<=cnt;i++){
		if(book[f[i].x][f[i].y]==0){
			return 0;
		}
	}
	return 1;
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>mat[i][j];
			maxx=max(maxx,mat[i][j]);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>x;
			if(x==1){
				cnt++;
				f[cnt].x=i;
				f[cnt].y=j;
			}
		}
	}
	while(l<=r){
		mid=(l+r)/2;
		if(check(mid)){
			r=mid-1;
			ans=mid;
		}else{
			l=mid+1;
		}
	}
	cout<<ans;
	return 0;
}
2022/12/11 11:24
加载中...