比赛 2025暑期集训第8场 评测结果 AWWAAWWWWW
题目名称 引水入城 最终得分 30
用户昵称 zhyn 运行时间 0.095 s
代码语言 C++ 内存使用 4.50 MiB
提交时间 2025-08-13 11:32:28
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m;

int num[600][600];
bool vis[600][600];
int dp[600][600];
bool k[600];

/*void add(){
	for(int i=2;i<n;i++){
		for(int j=1;j<=m;j++){
			if(j==1){
				if(num[i][2]<num[i][1]){
					e[(i-1)*m+1].push_back((i-1)*m+2);
				}
			}
			if(j==m){
				if(num[i][m-1]<num[i][m]){
					e[i*m].push_back(i*m-1);
				}
			}
			else{
				if(num[i][j-1]<num[i][j]){
					e[(i-1)*m+j].push_back((i-1)*m+j-1);
				}
				if(num[i][j+1]<num[i][j]){
					e[(i-1)*m+j].push_back((i-1)*m+j+1);
				}
			}
			if(num[i+1][j]<num[i][j]){
					e[(i-1)*m+j].push_back(i*m+j);
			}
		}
	}
}*/


void dfs(int x,int y,int s){
	//cout<<x<<" "<<y<<" "<<s<<"\n"; 
	if(dp[x][y]){
		return;
	}
	dp[x][y]=s;
	if(x>n){
		return;
	}
	if(num[x][y+1]<num[x][y]&&y!=m){
		dfs(x,y+1,s);
	}
	if(num[x][y-1]<num[x][y]&&y!=1){
		dfs(x,y+1,s);
	}
	if(num[x+1][y]<num[x][y]){
		dfs(x+1,y,s);
	}
	if(num[x-1][y]<num[x][y]&&x!=1){
		dfs(x-1,y,s);
	}
}


int main(){
	
	ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
	freopen("flow.in","r",stdin);
	freopen("flow.out","w",stdout);
   
	cin>>n>>m; 
   
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=m;j++){
    		cin>>num[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		dfs(1,i,i);
	}
	
	/*for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cout<<dp[i][j]<<" ";
		}
		cout<<"\n";
	}*/
	
	int ans=0,sum=0;
	bool flag=true;
	for(int i=1;i<=m;i++){
		if(dp[n][i]==0){
			ans++;
			flag=false;
		}
		else{
			if(k[dp[n][i]]){
				continue;
			}
			sum++;
			k[dp[n][i]]=true;
		}
	} 
	
	if(flag){
		cout<<"1\n"<<sum;
	}
	else{
		cout<<"0\n"<<ans;
	}
	
    return 0;
}