暑期集训20190727 水(water)
【题目描述】 有一块矩形土地被划分成n×m个正方形小块。这些小块高低不平,每一小 块都有自己的高度。水流可以由任意一块地流向周围四个方向的四块地中,但 是不能直接流入对角相连的小块中。 一场大雨后,由于地势高低不同,许多地方都积存了不少降水。假如你已 经知道这块土地的详细信息,你能求出每个小块的积水高度吗? 注意:假设矩形地外围的高度为 0。
【输入数据】 第一行包含两个非负整数n,m。 接下来n行每行m个整数表示第i行第j列的小块的高度。
【输出数据】 输出n行,每行m个由空格隔开的非负整数,表示每个小块的积水高度。
【样例输入】 3 3
4 4 0
2 1 3
3 3 -1
【样例输出】 0 0 0 0 1 0 0 0 1
【数据范围】 对于20%的数据,n,m<=4。 对于40%的数据,n,m<=15。 对于60%的数据,n,m<=50。 对于100%的数据,n,m<=300,小块高度的绝对值<=10^9。 在每一部分数据中,均有一半数据保证小块高度非负
把最外圈土地(紧挨外围)全部push进一个小根堆,
每次取出一个并插入所有相邻合法土地。
#include <bits/stdc++.h>
using namespace std;
struct field{
int ht;//height of the field
int wtr;//height of the water
bool vis;//visited or not
};
field f[][];
struct pos{
int x;
int y;
int ht;//the height used to calculate(as the height of water or land)
};
priority_queue<pos> q;
inline bool operator<(const pos &a, const pos &b){
return a.ht>b.ht;
} int mx[]={, , -, }, my[]={-, , , };
int n, m; void in_put(){
scanf("%d%d", &n, &m);
for(int i=; i<=n; i++)
for(int j=; j<=m; j++){
scanf("%d", &f[i][j].ht);
if(i== || i==n || j== || j==m){
f[i][j].vis = true;
if(f[i][j].ht >= ){
q.push({i, j, f[i][j].ht});
f[i][j].wtr = ;
}
else{
q.push({i, j, });
f[i][j].wtr = - f[i][j].ht;
}
}
}
}
void out_put(){
for(int i=; i<=n; i++){
for(int j=; j<=m; j++){
printf("%d ", f[i][j].wtr);
}
printf("\n");
}
return;
} int main(){
freopen("water.in", "r", stdin);
freopen("water.out", "w", stdout);
in_put();
while(!q.empty()){
pos temp = q.top();
q.pop();
for(int i=; i<; i++){
int nx = temp.x + mx[i], ny = temp.y + my[i];
if(nx>= && nx<=n && ny>= && ny<=m && !f[nx][ny].vis){
if(f[nx][ny].ht >= temp.ht){
f[nx][ny].wtr = ;
q.push({nx, ny, f[nx][ny].ht});
f[nx][ny].vis = true;
}
else{
f[nx][ny].wtr = temp.ht - f[nx][ny].ht;
q.push({nx, ny, temp.ht});
f[nx][ny].vis = true;
} }
}
}
out_put();
return ;
}
另一种相似做法(题解):
一个块的高度就是从这个块走出矩形的所有路径上的最大值的最小值。
新建一个点代表矩形外部。相邻块之间连边,权值为两块的较大值,矩形边界的块向矩形外部连边,权值为max(高度,0),求出最小生成树,
时间复杂度O(nmlog(nm))。
暑期集训20190727 水(water)的更多相关文章
- 7.30 正睿暑期集训营 A班训练赛
目录 2018.7.30 正睿暑期集训营 A班训练赛 T1 A.蔡老板分果子(Hash) T2 B.蔡老板送外卖(并查集 最小生成树) T3 C.蔡老板学数学(DP NTT) 考试代码 T2 T3 2 ...
- 2014 SCAU_ACM 暑期集训
暑期集训,希望能在这段时间获得对得起自己的提升吧 时间:7.11~8.30 集训各专题内容: 1.贪心,递推,基础DP(背包,区间DP,状态压缩DP(去年出了不少于2道铜牌题,看着办)) 2.搜索(B ...
- 2014年CCNU-ACM暑期集训总结
2014年CCNU-ACM暑期集训总结 那个本期待已久的暑期集训居然就这种.溜走了.让自己有点措手不及.很多其它的是对自己的疑问.自己是否能在ACM这个领域有所成就.带着这个疑问,先对这个暑假做个总结 ...
- 8.10 正睿暑期集训营 Day7
目录 2018.8.10 正睿暑期集训营 Day7 总结 A 花园(思路) B 归来(Tarjan 拓扑) C 机场(凸函数 点分治) 考试代码 A B C 2018.8.10 正睿暑期集训营 Day ...
- 8.6 正睿暑期集训营 Day3
目录 2018.8.6 正睿暑期集训营 Day3 A 亵渎(DP) B 绕口令(KMP) C 最远点(LCT) 考试代码 A B C 2018.8.6 正睿暑期集训营 Day3 时间:5h(实际) 期 ...
- 8.9 正睿暑期集训营 Day6
目录 2018.8.9 正睿暑期集训营 Day6 A 萌新拆塔(状压DP) B 奇迹暖暖 C 风花雪月(DP) 考试代码 A B C 2018.8.9 正睿暑期集训营 Day6 时间:2.5h(实际) ...
- 8.8 正睿暑期集训营 Day5
目录 2018.8.8 正睿暑期集训营 Day5 总结 A 友谊巨轮(线段树 动态开点) B 璀璨光滑 C 构解巨树 考试代码 A B C 2018.8.8 正睿暑期集训营 Day5 时间:3.5h( ...
- 8.7 正睿暑期集训营 Day4
目录 2018.8.7 正睿暑期集训营 Day4 A 世界杯(贪心) B 数组(线段树) C 淘汰赛 考试代码 A B C 2018.8.7 正睿暑期集训营 Day4 时间:5h(实际) 期望得分:. ...
- 8.5 正睿暑期集训营 Day2
目录 2018.8.5 正睿暑期集训营 Day2 总结 A.占领地区(前缀和) B.配对(组合) C 导数卷积(NTT) 考试代码 T1 T2 T3 2018.8.5 正睿暑期集训营 Day2 时间: ...
随机推荐
- [Redis] Redis的基本数据结构
key-value 通过key获取或设置value SET key value GET key SET server:name "fido" GET server:name SET ...
- Docker 本地私有仓库搭建:
Docker 本地私有仓库搭建: 创建数据卷目录: mkdir /home/sky/registry 用registry镜像启动容器: docker run -d -p 5000:5000 -v /h ...
- Java 学习笔记之 Synchronized锁对象
Synchronized锁对象: Synchronized取得的锁都是对象锁,而不是把一段代码或方法当作锁,哪个线程执行带synchronized关键字的方法,哪个线程就持有该方法所属对象的锁,那么其 ...
- FFmpeg(二) 解封装相关函数理解
一.解封装基本流程 ①av_register_All()////初始化解封装,注册解析和封装的格式. ②avformat_netword_init()//初始化网络,解析rtsp协议 ③avforma ...
- JAVA MyBatis配置文件用properties引入外部配置文件
方式一:通过properties 元素的子元素来传递数据 例如: <properties> <property name="driver" value=" ...
- win10 php安装redis 扩展
redis下载:https://github.com/MicrosoftArchive/redis/releases 我下载的是zip包,下载后安装redis. 开始安装php的reids扩展 查看p ...
- Java 并发编程(三):如何保证共享变量的可见性?
上一篇,我们谈了谈如何通过同步来保证共享变量的原子性(一个操作或者多个操作要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行),本篇我们来谈一谈如何保证共享变量的可见性(多个线程访问同一个变 ...
- [TLSR8267] 泰凌微 telink tlsr8267 ble ADC 用法浅谈
1.读 datasheet 在<DS_TLSR8267-E21_Datasheet for Telink BLE SoC TLSR8267.pdf>第11章详细介绍了ADC相关属性及参数. ...
- MySQL8安装及使用当中的一些注意事项
前言 这两天构建新项目,在本地安装的mysql8(本地环境windows),期间忘了密码,又卸载重装了一番,然后捣鼓了一顿授权给别人访问,最后磕磕绊绊的搞好了,下面是在这过程中遇到的问题及解决办法小结 ...
- Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用
多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程. 一.ThreadPoolTaskExecutor ...