比赛 2025暑期集训第8场 评测结果 AAAAAAAAAA
题目名称 引水入城 最终得分 100
用户昵称 20120223 运行时间 0.295 s
代码语言 C++ 内存使用 9.44 MiB
提交时间 2025-08-13 10:17:54
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N = 1005 ;
int g[N][N],n,m;
bool v[N][N]={0};   
int dx[4]={-1,0,1,0};
int dy[4]={0,-1,0,1};
int l[N][N],r[N][N];
void dfs(int x,int y)
{
    v[x][y]=1;
    for(int i=0;i<4;i++)
    {
        int fx=x+dx[i];
        int fy=y+dy[i];
        if(fx<=n&&fy<=m&&fx>=1&&fy>=1&&g[fx][fy]<g[x][y])
        {
            if(!v[fx][fy])dfs(fx,fy);
            l[x][y]=min(l[x][y],l[fx][fy]);
            r[x][y]=max(r[x][y],r[fx][fy]);
        }
    }
    return;
}
main() {
	freopen("flow.in","r",stdin);
	freopen("flow.out","w",stdout);
   cin>>n>>m;
   memset(l,21000000,sizeof(l));
   for(int i=1;i<=n;i++)
   for(int j=1;j<=m;j++)
   {
       cin>>g[i][j];
       if(i==n)l[i][j]=r[i][j]=j;
   }
   for(int i=1;i<=m;i++)
   if(!v[1][i])dfs(1,i);
   int ans=0;
   bool t=1;
   for(int i=1;i<=m;i++)
   {
       if(!v[n][i])
       {
       t=false;
       ans++;
       }
   }
   if(!t)cout<<0<<endl<<ans;
   else
   {
       int le=1;
       int ri=r[1][1];
       while(le<=m)
       {
           for(int i=1;i<=m;i++)
           if(l[1][i]<=le)
           ri=max(ri,r[1][i]);
       le=ri+1;
       ans++;
       }
       cout<<1<<endl<<ans;
         
   }
   return 0;
}