比赛 2025暑期集训第8场 评测结果 ATTTTTTTTT
题目名称 引水入城 最终得分 10
用户昵称 我也不知道 运行时间 17.986 s
代码语言 C++ 内存使用 4.31 MiB
提交时间 2025-08-13 11:04:30
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,m,h[501][501];
int ans=0;
int mmm[501]={0},nnn[501];
bool visit[501]={0};
int dfs(int x,int y,int c){
    if(x==n){
       mmm[c]=max(mmm[c],y);
       nnn[c]=min(nnn[c],y);
        visit[y]=1;
    }
    int x1[5]={0,0,0,-1,1},y1[5]={0,-1,1,0,0};
    for(int i=1;i<=4;i++){
        if(x+x1[i]>=1&&x+x1[i]<=n&&y+y1[i]>=1&&y+y1[i]<=m){
            if(h[x+x1[i]][y+y1[i]]<h[x][y])dfs(x+x1[i],y+y1[i],c);
        }
    }
    return 0;
}

int main() {
	freopen("flow.in", "r", stdin);
	freopen("flow.out", "w", stdout);
	cin >> n >>m;
	 memset(nnn,600,sizeof(nnn));
   for(int i=1;i<=n;i++){
       for(int j=1;j<=m;j++) cin>>h[i][j];
   }
   int L=1;
   for(int i=1;i<=m;i++){
       dfs(1,i,i);
   }
   int qqqq=0;
   for(int i=1;i<=m;i++){
       if(visit[i]!=1)qqqq++;
   }
   if(qqqq>0){
    cout<<0<<endl<<qqqq;
    return 0;
}
int R=0;
   while(L<m){
       for(int i=1;i<=m;i++){
           if(nnn[i]<=L){
              R=max(R,mmm[i]);
           }
       }
       L=R;
       ans++;
   }
   cout<<1<<endl<<ans;
	return 0;
}