优先队列,据说标程是并查集,没思路。貌似优先队列都是直接用stl写的,又逼我用stl了。prioriry_queue不熟。

ps: value值越小,优先级越高。所以重载 < 运算符时按优先级从大到小排序

bool operator < (const node a, const node b) {if(a.day != b.day)    return a.day > b.day;return a.type > b.type;}

参考网上的代码

View Code

 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5  6 using namespace std; 7  8 const int N = 510; 9 const int inf = ~0u>>2;10 11 struct node {12     int x, y;13     int day;14     int type;15 16 };17 18 priority_queue<node> q;19 20 int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};21 int m, n;22 int mp[N][N];23 int list[N*N];24 25 bool operator < (const node a, const node b) {26         if(a.day != b.day)    return a.day > b.day;27         return a.type > b.type;28 }29 30 bool insq(int x, int y) {31     if(x < 0 || x >= m || y < 0 || y >= n)    return false;32     return true;33 }34 35 void bfs() {36     node u, v;37     int d, i;38 39     while(!q.empty()) {40         u = q.top(); q.pop();41 42         d = -inf;43         v.day = u.day;44         v.type = u.type;45 46         for(i = 0; i < 4; ++i) {47             v.x = u.x + dir[i][0];48             v.y = u.y + dir[i][1];49 50             if(!insq(v.x, v.y) || mp[v.x][v.y] > 0)    continue;51 52             if(-1*mp[v.x][v.y] <= v.day) {53                 mp[v.x][v.y] = v.type;54                 list[v.type]++;55                 q.push(v);56             } else if(mp[v.x][v.y] > d) {57                 d = mp[v.x][v.y];58             }59         }60         if(d != -inf) {61             u.day = -1*d;62             q.push(u);63         }64     }65 }66 67 int main() {68     freopen("data.in", "r", stdin);69 70     int i, j, t;71     node p;72     while(~scanf("%d%d", &m, &n)) {73         memset(list, 0, sizeof(list));74 75         for(i = 0; i < m; ++i) {76             for(j = 0; j < n; ++j) {77                 scanf("%d", &mp[i][j]);78                 if(mp[i][j] > 0) {79                     p.x = i; p.y = j;80                     p.day = 1; p.type = mp[i][j];81                     list[p.type] ++;82                     q.push(p);83                 }84             }85         }86         bfs();87         scanf("%d", &t);88         while(t--) {89             scanf("%d", &i);90             printf("%d\n", list[i]);91         }92     }93     return 0;94 }

转载于:https://www.cnblogs.com/vongang/archive/2012/04/01/2429355.html

ZOJ 2849 Attack of Panda Virus (优先队列 priority_queue)相关推荐

  1. C++ STL中的优先队列(priority_queue)使用

    原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...

  2. 优先队列priority_queue 用法详解

    优先队列priority_queue 用法详解 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序 每次的push和pop操作,队列都会动态的调整,以达 ...

  3. 浅谈C++ STL中的优先队列(priority_queue)

    2019独角兽企业重金招聘Python工程师标准>>> 从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维 ...

  4. 9.优先队列,priority_queue

    1 #include <iostream> 2 #include <queue> 3 #include <deque> 4 #include <list> ...

  5. 优先队列(priority_queue)的原理及用法

    一.优先队列的原理及使用 std::priority_queue:在优先队列中,优先级高的元素先出队列,并非按照先进先出的要求,类似一个堆(heap).其模板声明带有三个参数,priority_que ...

  6. c++——优先队列(priority_queue)

    优先队列详解/C++ 优先队列 1.概念:什么是优先队列呢?在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问 .即优先队列具有最高级先出的行为特征.它可以说是队列和排序的完 ...

  7. POJ 1581 优先队列 priority_queue -- 比赛胜者求解

    题目链接:http://poj.org/problem?id=1581 题目大意: 给定选手姓名,及答题提交次数(提交正确前,错误一次罚20分),每题的做题时间罚分(未正确作答的不罚分),最后求谁是胜 ...

  8. 优先队列priority_queue自定义比较函数

    以一个例子进行说明,假设优先队列的每个元素是pair<int,int>,我需要自定义一个用于pair<int,int>比较的函数: decltype返回该变量的类型 bool ...

  9. 【转】c++优先队列(priority_queue)用法详解

    既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...

最新文章

  1. graphpad做折线图坐标轴数字_多组数据制作折线图,四步让你的图表实用又美观,老板看了都说好...
  2. Spring Remoting: Hessian--转
  3. mysqli num php_php mysqli_num_rows函数怎么用
  4. GitHub Actions 支持 skip ci 了
  5. python下设置urllib连接超时
  6. 联想笔记本声音太小怎么办_图文详解笔记本电脑声音太小解决方法
  7. 添加无线网连接服务器,单片机加WIFI模块,一直无法连接到TCP服务器麻烦大家看看...
  8. MySQL连接navicat出现 2059 - authentication plugin ‘caching_sha2_password解决方法
  9. 怎么看自己电脑的IP地址
  10. python读取邮箱邮件_Python读取我的outlook邮箱并分析邮件
  11. 关于炼丹,你是否知道这些细节?
  12. 计算机网络之(7):TCP流量控制、拥塞控制 + 网络层
  13. 要不要考公务员 | 进国企?
  14. Android SearchView基本用法
  15. level set 介绍4(水平集方法)
  16. 中国软件:10个人 20年坎坷路
  17. 高斯消去、列主元消去、Lu分解、追赶法(matlab)
  18. jpg图片怎么转换为CAD图纸?简单几步教你操作
  19. C语言 :学习动态内存分配
  20. lazada API 获得商品评论列表

热门文章

  1. 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
  2. 【解决方案】Selenium打开网站却显示空白
  3. linux内核 header.s,Linux启动代码header.S研究
  4. js调整数组某些元素到指定位置顺序_如何将一个 JavaScript 数组打乱顺序?
  5. docker (centOS 7) 使用笔记4 - etcd服务
  6. Spring启动执行流程梳理
  7. sublime text3中文文件名显示为框框,怎么解决
  8. 修改Linux安装软件镜像源为阿里云
  9. asp.net mvc请求响应模型原理回顾
  10. 【每日进步】May 2012