#include<bits/stdc++.h>
#define int long long
#define il inline
using namespace std;
const int N=1000;
int m,n,a[N][N],s[N][N],v[N],ans,cnt,l=N+1,r=1;
int dx[5]={0,0,1,0,-1},dy[5]={0,1,0,-1,0};
int i,j;
il int bfs(int mi){
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(a[i][j]>mi){
s[i][j]=1;
}
}
}
queue<int>qx,qy;
qx.push(1);
qy.push(1);
while(!qx.empty()){
int x=qx.front(),y=qy.front();
qx.pop();
qy.pop();
for(i=1;i<=4;i++){
int xx=x+dx[i],yy=y+dy[i];
if(s[xx][yy]!=1&&xx>=1&&xx<=m&&yy>=1&&yy<=n){
s[xx][yy]=1;
qx.push(xx);
qy.push(yy);
if(yy==n&&v[xx]!=1){
cnt++;
v[xx]=1;
}
if(cnt==m){
cnt=0;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
s[i][j]=0;
}
}
for(i=1;i<=m;i++){
v[i]=0;
}
return 1;
}
}
}
}
return 0;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>m>>n;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
cin>>a[i][j];
l=min(l,a[i][j]);
r=max(r,a[i][j]);
}
}
while(l<=r){
int mid=(l+r)>>1;
if(bfs(mid)){
r=mid-1;
ans=mid;
}
else
l=mid+1;
}
cout<<ans;
return 0;
}
蒟蒻觉得没问题......
就是过不了吐了
全wa样例都炸
悬关qwq