ZOJ 2849 Attack of Panda Virus (优先队列 priority_queue)
优先队列,据说标程是并查集,没思路。貌似优先队列都是直接用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;}
参考网上的代码
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)相关推荐
- C++ STL中的优先队列(priority_queue)使用
原文:https://www.cnblogs.com/cielosun/p/5654595.html 今天讲一讲优先队列(priority_queue),实际上,它的本质就是一个heap,我从STL中 ...
- 优先队列priority_queue 用法详解
优先队列priority_queue 用法详解 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序 每次的push和pop操作,队列都会动态的调整,以达 ...
- 浅谈C++ STL中的优先队列(priority_queue)
2019独角兽企业重金招聘Python工程师标准>>> 从我以前的博文能看出来,我是一个队列爱好者,很多并不是一定需要用队列实现的算法我也会采用队列实现,主要是由于队列和人的直觉思维 ...
- 9.优先队列,priority_queue
1 #include <iostream> 2 #include <queue> 3 #include <deque> 4 #include <list> ...
- 优先队列(priority_queue)的原理及用法
一.优先队列的原理及使用 std::priority_queue:在优先队列中,优先级高的元素先出队列,并非按照先进先出的要求,类似一个堆(heap).其模板声明带有三个参数,priority_que ...
- c++——优先队列(priority_queue)
优先队列详解/C++ 优先队列 1.概念:什么是优先队列呢?在优先队列中,元素被赋予优先级,当访问元素时,具有最高级优先级的元素先被访问 .即优先队列具有最高级先出的行为特征.它可以说是队列和排序的完 ...
- POJ 1581 优先队列 priority_queue -- 比赛胜者求解
题目链接:http://poj.org/problem?id=1581 题目大意: 给定选手姓名,及答题提交次数(提交正确前,错误一次罚20分),每题的做题时间罚分(未正确作答的不罚分),最后求谁是胜 ...
- 优先队列priority_queue自定义比较函数
以一个例子进行说明,假设优先队列的每个元素是pair<int,int>,我需要自定义一个用于pair<int,int>比较的函数: decltype返回该变量的类型 bool ...
- 【转】c++优先队列(priority_queue)用法详解
既然是队列那么先要包含头文件#include <queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队 优先队列具有队列的所有特性, ...
最新文章
- graphpad做折线图坐标轴数字_多组数据制作折线图,四步让你的图表实用又美观,老板看了都说好...
- Spring Remoting: Hessian--转
- mysqli num php_php mysqli_num_rows函数怎么用
- GitHub Actions 支持 skip ci 了
- python下设置urllib连接超时
- 联想笔记本声音太小怎么办_图文详解笔记本电脑声音太小解决方法
- 添加无线网连接服务器,单片机加WIFI模块,一直无法连接到TCP服务器麻烦大家看看...
- MySQL连接navicat出现 2059 - authentication plugin ‘caching_sha2_password解决方法
- 怎么看自己电脑的IP地址
- python读取邮箱邮件_Python读取我的outlook邮箱并分析邮件
- 关于炼丹,你是否知道这些细节?
- 计算机网络之(7):TCP流量控制、拥塞控制 + 网络层
- 要不要考公务员 | 进国企?
- Android SearchView基本用法
- level set 介绍4(水平集方法)
- 中国软件:10个人 20年坎坷路
- 高斯消去、列主元消去、Lu分解、追赶法(matlab)
- jpg图片怎么转换为CAD图纸?简单几步教你操作
- C语言 :学习动态内存分配
- lazada API 获得商品评论列表
热门文章
- 链栈的建立、判空、入栈、出栈、求长、访顶、清空和销毁
- 【解决方案】Selenium打开网站却显示空白
- linux内核 header.s,Linux启动代码header.S研究
- js调整数组某些元素到指定位置顺序_如何将一个 JavaScript 数组打乱顺序?
- docker (centOS 7) 使用笔记4 - etcd服务
- Spring启动执行流程梳理
- sublime text3中文文件名显示为框框,怎么解决
- 修改Linux安装软件镜像源为阿里云
- asp.net mvc请求响应模型原理回顾
- 【每日进步】May 2012