为什么会MLE??
查看原帖
为什么会MLE??
377768
Tooler_Yang楼主2022/8/30 20:14
#include<bits/stdc++.h>
using namespace std;
const int dx[4]={0,0,-1,1};
const int dy[4]={1,-1,0,0};
int n,m;
int p[1001][1001];
struct Point{
	int x,y;
};
bool bfs(int fx,int fy,int mx){
	bool vis[1001][1001];
	memset(vis,false,sizeof(vis));
	int ex=n,ey=m;
	queue<Point> q;
	Point fst;
	fst.x=fx,fst.y=fy;
	q.push(fst);
	vis[fx][fy]=true;
	while(!q.empty()){
		int nx,ny;
		nx=q.front().x;
		ny=q.front().y;
		vis[nx][ny]=true;
		q.pop();
		for(int i=0;i<4;i++){
			int xx=nx+dx[i];
			int yy=ny+dy[i];
			if(xx<=0||xx>n||yy<=0||yy>m||vis[xx][yy]==true||p[xx][yy]>mx) continue;
			else{
				if(xx==n) return true;
				Point node;
				node.x=xx;
				node.y=yy;
				q.push(node);
			}
		}
	}
	return false;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int l=0x3f3f3f3f,r=0xc0c0c0c0;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>p[i][j];
			if(!p[i][j]) continue;
			l=min(l,p[i][j]),r=max(r,p[i][j]);
		}
	}
	int ans=0;
	while(l<=r){
		int mid=(l+r)>>1;
//		cout<<mid<<"\n";
		if(bfs(1,1,mid)) r=mid-1,ans=mid;
		else l=mid+1;
	}
	cout<<ans;
	return 0;
}

如果把所有的 intint 改为 shortshort intintTLE,不然会MLE

2022/8/30 20:14
加载中...