蒟蒻求助。(哭哭哭哭)
大佬酷来康康(第三个测试点RE了)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int a[501][501],m,n,ans,b[501],sum;
bool vis[501][501];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
struct point
{
int x,y;
};
queue<point> q;
void bfs(int u,int v)
{
point start;
start.x=u;
start.y=v;
vis[u][v]=true;
q.push(start);
//cout<<a[u][v]<<" ";
while(!q.empty())
{
int x=q.front().x,y=q.front().y;
for(int k=0;k<=3;k++)
{
int tx,ty;
tx=dx[k]+x;
ty=dy[k]+y;
if(a[x][y]>a[tx][ty]&&vis[tx][ty]==false)
{
//cout<<a[tx][ty]<<" ";
point temp;
temp.x=tx;
temp.y=ty;
q.push(temp);
vis[tx][ty]=true;
}
else
continue;
}
q.pop();
}
//printf("\n\n");
return;
}
int main()
{
memset(vis,false,sizeof(vis));
memset(a,0x3f3f3f3f,sizeof(a));
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
if(a[1][i]<a[1][i+1]&&i<n)
b[i]=i+1;
//for(int i=1;i<=n;i++)
// cout<<b[i]<<" ";
//cout<<endl;
for(int i=1;i<=n;i++)
if(!vis[1][i]&&b[i]==0)
{
ans++;
bfs(1,i);
}
else
if(!vis[1][i])
{
while(b[i]!=0)
i=b[i];
ans++;
bfs(1,i);
}
//cout<<endl;
for(int i=1;i<=n;i++)
if(!vis[m][i])
sum++;
if(sum!=0)
{
cout<<0<<endl;
cout<<sum;
return 0;
}
else
cout<<1<<endl;
cout<<ans;
return 0;
}