社区讨论
70pts! 求调!悬关!
P1514[NOIP 2010 提高组] 引水入城参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @m1vzuqb0
- 此快照首次捕获于
- 2024/10/05 18:11 去年
- 此快照最后确认于
- 2025/11/04 17:58 4 个月前
第1、4、5个点wa了,样例都过,小蒟蒻尽力了
CPP#include<bits/stdc++.h>
using namespace std;
const int maxn=505;
int n,m,h[maxn][maxn];
int l[maxn][maxn],r[maxn][maxn];
bool vis[maxn][maxn];
bool flag=0;
int nxt[4][2]={0,1,1,0,0,-1,-1,0};
void dfs(int x,int y){
vis[x][y]=1;
for(int i=0;i<=3;i++){
int tx=x+nxt[i][0];
int ty=y+nxt[i][1];
if(tx>n||ty>m||tx<1||ty<1) continue;
if(h[tx][ty]>=h[x][y]) continue;
if(vis[tx][ty]==0) dfs(tx,ty);
l[x][y]=min(l[x][y],l[tx][ty]);
r[x][y]=max(r[x][y],r[tx][ty]);
//cout<<l[tx][ty]<<" "<<r[tx][ty]<<endl;
}
}
int main(){
//freopen("P1514_1.in","r",stdin);
//freopen("abc.out","w",stdout);
cin>>n>>m;
memset(vis,0,sizeof(vis));
memset(l,0x3f,sizeof(l));
memset(r,0,sizeof(r));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>h[i][j];
}
}
for(int i=1;i<=m;i++){
l[n][i]=r[n][i]=i;
}
for(int i=1;i<=m;i++){
if(vis[1][i]==0) dfs(1,i);
}
int cnt=0;
for(int i=1;i<=m;i++){
if(vis[n][i]==0){
flag=1;
cnt++;
}
}
if(flag==1){
cout<<'0'<<endl;
cout<<cnt;
return 0;
}
int left=1;
while(left<=m){
int maxr=0;
for(int i=1;i<=m;i++)
if(l[1][i]<=left)
maxr=max(maxr,r[1][i]);
left=maxr+1;
cnt++;
}
cout<<'1'<<endl;
cout<<cnt;
return 0;
}```
回复
共 1 条回复,欢迎继续交流。
正在加载回复...