• 【noip模拟赛5】水流


      

    描述

     

    全球气候变暖,小镇A面临水灾。于是你必须买一些泵把水抽走。泵的抽水能力可以认为是无穷大,但你必须把泵放在合适的位置,从而能使所有的水能流到泵里。小镇可以认为是N * M的矩阵。矩阵里的每个单元格都是一个‘a’- ‘z’小写字母,该小写字母表示该格子的高度,字母大的表示该单元格比较高,反之,表示该格子高度比较低。当前单元格的水可以流到上、下、左、右四个格子,但必须满足这些格子的高度是小于或者等于当前格子的高度。现在,给你一些N * M的矩阵,你至少要买多少个泵,才能把所有格子的水都能被抽走?

    输入

     

    多组测试数据。

    第一行:K,表示有K组测试数据。(1<=K<=5)

    接下来有K组测试数据,每组测试数据格式如下:

    第一行:两个正数, N,M 。 1<=N,M<=50,表示小镇的大小。

    接下来有N行,每行有M个小写字母,表示小镇的地图。

    输出

     

    K行,每行对应一组数据。至少要买多少个泵,才能把所有格子的水都能抽走。

    输入样例 1 

    2 
    5  5 
    ccccc
    cbbbc
    cbabc
    cbbbc
    ccccc
    4  9 
    cbabcbabc
    cbabcbabc
    cbabcbabc
    cbabcbabc

    输出样例 1

    1
    2

    思路:对当前最低位置进行dfs染色即可
    #include<bits/stdc++.h>
    using namespace std;
    //input
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m);
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define LL long long
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    #define N 60
    
    int dx[4]={0,1,-1,0};
    int dy[4]={1,0,0,-1};
    int n,m;
    int inmap(int x,int y)
    {
        return x>=1&&y>=1&&x<=n&&y<=m;
    }
    char mp[N][N];
    int vis[N][N];
    void dfs(int x,int y)
    {
        vis[x][y]=1;
        rep(i,0,3)
        {
            int a=x+dx[i];
            int b=y+dy[i];
            if(!inmap(a,b)||vis[a][b])continue;
            if( mp[x][y]<=mp[a][b] )
                dfs(a,b);
        }
    }
    
    
    int main()
    {
        int t;RI(t);
        while(t--)
        {
            RII(n,m);
            CLR(vis,0);
            rep(i,1,n)
            RS(mp[i]+1);
            int cnt=0;
            for(char k='a';k<='z';k++)
            rep(i,1,n)
            rep(j,1,m)
            if(!vis[i][j]&&mp[i][j]==k)
            {
                cnt++;
                dfs(i,j);
            }
            cout<<cnt<<endl;
        }
    }
    View Code




  • 相关阅读:
    ZooKeeper 相关知识
    zookeeper 启动和停止脚本
    es 6.4.3 版本的es的处理方式
    SpringBoot启动使用elasticsearch启动异常:Received message from unsupported version:[2.0.0] minimal compatible
    windows下安装elasticsearch-6.4.3和elasticsearch-head插件
    二项式公式
    计算公式
    大规模数据如何检索?
    设计数据服务:为报表服务提供服务接口
    win10 桌面快捷键技术
  • 原文地址:https://www.cnblogs.com/bxd123/p/10554671.html
Copyright © 2020-2023  润新知