rt,#1,#4,#10 AC,其余 WA 。
#include <bits/stdc++.h>
using namespace std;
int vis[501][501],a[1001][1001],op[501][501];
int n,m,ans,s,nx,ny,sx,sy,l,r = 114514000,mid;
int dx[4] = {0,0,-1,1},dy[4] = {-1,1,0,0};
void dfs(int x,int y,int mid) {
ans += op[x][y];
for (int i = 0;i < 4;i ++ ) {
nx = x + dx[i];
ny = y + dy[i];
if (nx<1||ny<1||nx>n||ny>m||vis[nx][ny]) continue;
if (abs(a[x][y] - a[nx][ny]) < mid) {
vis[nx][ny] = 1;
dfs(nx,ny,mid);
}
}
}
int erfen(){
while (l < r) {
memset(vis,0,sizeof vis);
mid = (l + r) / 2,ans=0;
vis[sx][sy] = 1;
dfs(sx,sy,mid);
if (ans == s) r = mid;
else l = mid + 1;
}
return l-1;
}
int main() {
cin>>n>>m;
for (int i = 1;i <= n;i ++ ) {for (int j = 1;j <= m;j++) cin>>a[i][j]; }
for (int i = 1;i <= n;i ++ ) {
for (int j = 1;j <= m;j ++ ) {
cin>>op[i][j];
if (op[i][j]) {
sx = i,sy = j;
}
s += op[i][j];
}
}
cout<<erfen();
return 0;
}