其他全部tle,除了1,4两点,难道广搜连n<=100,m<=100的数据都过不了吗?,明明复杂度是 n∗m∗m啊
#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;
struct node{
int l,r;
}e[505];
int n,m,map[505][505],i,j,L,R,z,d[505],cnt=0,pos=1;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
bool cmp(node x,node y){
if(x.l==y.l)return x.r>y.r;
return x.l<y.l;
}
void bfs(int y){
int vis[505][505];
memset(vis,0,sizeof(vis));
queue<int>qx,qy;
qx.push(1),qy.push(i);
vis[1][i]=1;
while(!qx.empty())
{
int x=qx.front(),y=qy.front();
qx.pop(),qy.pop();
for(int k=0;k<4;k++){
int xx=x+dx[k],yy=y+dy[k];
if(!vis[xx][yy]&&map[xx][yy]<map[x][y]&&xx>0&&yy>0&&xx<=n&&yy<=m){
vis[xx][yy]=1;
qx.push(xx),qy.push(yy);
}
}
}
for(int k=1;k<=m+1;k++){
if(e[i].l&&e[i].r)continue;
if(!e[i].l&&vis[n][k])e[i].l=k;
if(e[i].l&&!vis[n][k])e[i].r=k-1;
if(!d[k]&&vis[n][k])d[k]=1;
}
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>map[i][j];
for(i=1;i<=m;i++)
bfs(i);
for(i=1;i<=m;i++)
if(!d[i])
cnt++;
if(cnt){
cout<<0<<endl<<cnt<<endl;
return 0;
}
sort(e+1,e+m+1,cmp);
while(e[pos].l==0)pos++;
L=e[pos].l,R=e[pos].r,pos++,cnt=1;
while(R<m){
int tmp=-1;
for(i=pos;i<=m;i++){
if(e[i].l>R){
pos=i;
break;
}
tmp=max(tmp,e[i].r);
}
R=tmp;
cnt++;
}
cout<<1<<endl<<cnt<<endl;
return 0;
}