#include<stdio.h>

#include<string.h>

#include<queue>//水杯盛水问题,用优先队列不断从最小的边缘开始

using namespace std;

int n,m;

#define N 400

int p[N][N];

struct node {

  int x,y,w;

  friend bool operator<(node a,node b) {//优先队列

   return a.w>b.w;//从小到大出队

  }

};

int visit[N][N];

int dis[4][2]={1,0,0,1,-1,0,0,-1};//四个方向

int judge(int x,int y) {

if(x<=n&&x>=1&&y<=m&&y>=1&&!visit[x][y])

    return 1;

return 0;

}

int main() {

    int i,j,sum;

while(scanf("%d%d",&m,&n)!=EOF) {

        priority_queue<node>q;

        node cur,next;

        memset(visit,0,sizeof(visit));

    for(i=1;i<=n;i++)

        for(j=1;j<=m;j++) {

        scanf("%d",&p[i][j]);

        if(j==1||j==m||i==1||i==n) {//先将杯子的边缘加入

        cur.x=i;cur.y=j;

        cur.w=p[i][j];

        visit[i][j]=1;//标记边缘不能搜索

        q.push(cur);

        }

        }

        sum=0;

        while(!q.empty()) {//每次从最小的边缘开始

            cur=q.top();

            q.pop();

            for(i=0;i<4;i++) {

                int xx=next.x=cur.x+dis[i][0];

                int yy=next.y=cur.y+dis[i][1];

                if(judge(xx,yy)) {//判断

                        visit[xx][yy]=1;

                    if(p[xx][yy]<cur.w) {//如果当前的边缘大于水杯内部

                        sum+=cur.w-p[xx][yy];//高度差即为所能盛的水

                        next.w=cur.w;//改变当前点值

                        q.push(next);

                    }

                    else {//

                        next.w=p[xx][yy];/

                        q.push(next);//

                    }

                }

            }

        }

        printf("%d\n",sum);//

    }

return 0;

}

nyoj 547 优先队列的更多相关文章

  1. nyoj 284 坦克大战 (优先队列)

    题目链接:http://acm.nyist.net/JudgeOnline/status.php?pid=284 特殊数据: 5 5 BBEEY EEERB SSERB SSERB SSETB 7 非 ...

  2. nyoj 1022 最少步数【优先队列+广搜】

    最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 ...

  3. nyoj 757 期末考试【优先队列+贪心】

    期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣 ...

  4. NYOJ 1107 最高的奖励(贪心+优先队列)

    最高的奖励 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 请问:挖掘机技术哪家强?AC了告诉你! 给你N(N<=3*10^4)个任务,每个任务有一个截止完成时 ...

  5. NYOJ 284 坦克大战 bfs + 优先队列

    这类带权的边的图,直接广搜不行,要加上优先队列,这样得到的结果才是最优的,这样每次先找权值最小的,代码如下 #include <stdio.h> #include <iostream ...

  6. nyoj 55 懒省事的小明 优先队列 multiset 还有暴力

    懒省事的小明 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 3   描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的 ...

  7. NYOJ 284 坦克大战 【BFS】+【优先队列】

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 Many of us had played the game "Battle city" ...

  8. nyoj 55 懒省事的小明(priority_queue优先队列)

    懒省事的小明 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述       小明很想吃果子,正好果园果子熟了.在果园里,小明已经将所有的果子打了下来,而且按果子的不同种 ...

  9. nyoj 483 Nightmare【bfs+优先队列】

    Nightmare 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 Ignatius had a nightmare last night. He found him ...

随机推荐

  1. WINDOWS下配置SVN代码管理

    服务器端使用 visualsvn server,客户端使用tortoiseSvn. 一.服务器端 1.首先,下载visualsvn server,安装到服务器.下载地址: http://www.vis ...

  2. K度限制MST poj 1639

    /* k度限制MST:有一个点的度<=k的MST poj 1639 要求1号点的度不超过k 求MST 我们先把1号点扔掉 跑MST 假设有sum个连通分支 然后把这sum个分支连到1上 就得到了 ...

  3. SQL 导出表数据存储过程

    SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- ...

  4. P3387 【模板】缩点 tarjan

    虽说是模板题,但是竟然中间有dp的部分...先tarjan缩点,重新建图.然后记忆化搜索,搜索dag中的最小环. 题干: 题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值, ...

  5. CMMI的SG/GG概念区别与SP/GP概念的区别

    每一个 “流程区域” 会细分为多个子目标.若该子目标只对应单一的流程区域,称为 “特定目标(Specific goal)”:若子目标会涵跨多个流程区域,则称为 “一般目标(Generic goal)” ...

  6. codevs1060 搞笑世界杯(概率dp)

    1060 搞笑世界杯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界 ...

  7. 如何让 vue 在 sublime 中变成彩色的

    在 sublime 中编辑 vue 时,导入后是纯白色的文本,如下图: 想让其变成彩色的文本,需要安装插件,步骤如下: 1. 按住:Ctrl + Alt + P 2. 输入:install Packa ...

  8. php 制作略缩图

    一.需求 最近公司的项目中有个需求,就是用户上传自己的微信二维码,然后系统会自动将用户的微信二维码合并到产品中 二.分析 因为该系统是手机端的,所以从用户端的体验出发,用户当然是直接在微信上保存二维码 ...

  9. Oracle配置说明

    当Oracle安装完成后,为后续能够顺利得导出空表,特做一下配置(重点关注2.1) 1.1.查询空表select table_name from user_tables where NUM_ROWS= ...

  10. POJ1915 BFS&双向BFS

    俩月前写的普通BFS #include <cstdio> #include <iostream> #include <cstring> #include <q ...