zoukankan      html  css  js  c++  java
  • 引水入城

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=507;
     6 int h[maxn][maxn],l[maxn][maxn],r[maxn][maxn],ans1,ans2;
     7 int n,m;
     8 bool vis[maxn][maxn],flag;
     9 int dx[4]={0,1,0,-1};
    10 int dy[4]={-1,0,1,0};
    11 void dfs(int x,int y){
    12     vis[x][y]=true;
    13     for(int i=0;i<4;i++){
    14         if(x+dx[i]<1||x+dx[i]>n||y+dy[i]<1||y+dy[i]>m) continue;
    15         if(h[x+dx[i]][y+dy[i]]>=h[x][y]) continue;
    16         if(!vis[x+dx[i]][y+dy[i]]) dfs(x+dx[i],y+dy[i]);
    17         l[x][y]=min(l[x][y],l[x+dx[i]][y+dy[i]]);
    18         r[x][y]=max(r[x][y],r[x+dx[i]][y+dy[i]]);
    19     } 
    20 }
    21 int main(){
    22     memset(l,0x7f,sizeof(l));
    23     cin>>n>>m;
    24     for(int i=1;i<=n;i++)
    25         for(int j=1;j<=m;j++)
    26             cin>>h[i][j];
    27     for(int i=1;i<=m;i++)
    28         l[n][i]=i,r[n][i]=i;//因为只初始化了沙漠地区,所以是沙漠地区的值不断往上传 
    29     for(int i=1;i<=m;i++)
    30         if(!vis[1][i]) dfs(1,i);
    31     for(int i=1;i<=m;i++){
    32         if(!vis[n][i]) ans1++;
    33     }
    34     if(ans1>0) cout<<0<<endl<<ans1<<endl;
    35     else{
    36         int sta=1,end=1;
    37         while(sta<=m){//end<=m错,end永远<=m 
    38             for(int i=1;i<=m;i++){
    39                 if(l[1][i]<=sta){
    40                     end=max(end,r[1][i]); 
    41                 }
    42             }
    43             ans2++;
    44             sta=end+1;
    45         }
    46         cout<<1<<endl<<ans2<<endl;
    47     }
    48     return 0;
    49 } 
  • 相关阅读:
    写优先
    生产者消费者信号量的个人理解
    向上过滤
    操作系统之进程调度算法笔记
    idea学习
    计算机网络之网络层
    rest-framework routers
    rest framework ViewSet
    rest framework Genericview
    rest framework Views
  • 原文地址:https://www.cnblogs.com/lcan/p/9464250.html
Copyright © 2011-2022 走看看