比赛 |
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;
}