BZOJ5101 : [POI2018]Powód
求出Kruskal重构树,那么重构树上每个点的取值范围是定的。
考虑树形DP,则对于一个点,要么所有点水位相同,要么还未发生合并。
故$dp[x]=up[x]-down[x]+1+dp[l[x]]\times dp[r[x]]$。
时间复杂度$O(nm\log(nm))$。
#include<cstdio>
#include<algorithm>
const int N=1000010;
int n,m,H,ce,i,j,x,y,tot,f[N],son[N][2],l[N],r[N],dp[N];
struct E{int x,y,w;}e[N];
inline bool cmp(const E&a,const E&b){return a.w<b.w;}
inline int id(int x,int y){return (x-1)*m+y;}
int F(int x){return f[x]==x?x:f[x]=F(f[x]);}
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
int main(){
read(n),read(m),read(H);
for(i=1;i<=n;i++)for(j=1;j<m;j++){
e[++ce].x=id(i,j);
e[ce].y=id(i,j+1);
read(e[ce].w);
}
for(i=1;i<n;i++)for(j=1;j<=m;j++){
e[++ce].x=id(i,j);
e[ce].y=id(i+1,j);
read(e[ce].w);
}
std::sort(e+1,e+ce+1,cmp);
tot=n*m;
for(i=1;i<=tot;i++)f[i]=i;
for(i=1;i<=ce;i++){
x=F(e[i].x),y=F(e[i].y);
if(x!=y){
son[++tot][0]=x;
son[tot][1]=y;
f[x]=f[y]=f[tot]=tot;
r[x]=r[y]=e[i].w;
l[tot]=e[i].w+1;
}
}
r[tot]=H;
for(i=1;i<=tot;i++)dp[i]=(1LL*dp[son[i][0]]*dp[son[i][1]]+r[i]-l[i]+1)%1000000007;
return printf("%d",dp[tot]),0;
}
BZOJ5101 : [POI2018]Powód的更多相关文章
- [bzoj5101][POI2018]Powódź_并查集
Powódź bzoj-5101 POI-2018 题目大意:在地面上有一个水箱,它的俯视图被划分成了$n$行$m$列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水箱与外界之间有一堵高度无穷大 ...
- BZOJ5101[POI2018]Powódź——并查集
题目描述 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水 箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格子的高度都是[ ...
- 【BZOJ5101】[POI2018]Powód 并查集
[BZOJ5101][POI2018]Powód Description 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水箱与外界之间有一堵高度无 ...
- [POI2018]Powódź
Description 在地面上有一个水箱,它的俯视图被划分成了n行m列个方格,相邻两个方格之间有一堵厚度可以忽略不计的墙,水 箱与外界之间有一堵高度无穷大的墙,因此水不可能漏到外面.已知水箱内每个格 ...
- POI2018
[BZOJ5099][POI2018]Pionek(极角排序+two pointers) 几个不会严谨证明的结论: 1.将所有向量按极角排序,则答案集合一定是连续的一段. 当答案方向确定时,则一个向量 ...
- bzoj5100 [POI2018]Plan metra 构造
5100: [POI2018]Plan metra Time Limit: 40 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 189 Sol ...
- [POI2018]Pionek
[POI2018]Pionek 题目大意: 在无限大的二维平面的原点放置着一个棋子.你有\(n(n\le2\times10^5)\)条可用的移动指令,每条指令可以用一个二维整数向量表示.请你选取若干条 ...
- bzoj千题计划249:bzoj5100: [POI2018]Plan metra
http://www.lydsy.com/JudgeOnline/problem.php?id=5100 1.找到d1[i]+dn[i] 最小的点,作为1到n链上的点 2.令链长为D,若abs(d1[ ...
- BZOJ5101 POI2018Powódź(并查集)
如果某个格子的积水量超过了该格子的某个挡板高度,那么挡板另一端的积水量就会与其相同.看起来是一个不断合并的过程,考虑并查集.枚举深度,维护每个连通块内的方案数,深度超过某挡板高度时,将两端的连通块合并 ...
随机推荐
- python 0007
#coding='utf-8'# import re import os def get_list(): list_file=[] for f in os.listdir(): if f.endswi ...
- Mongodb for .Net Core 驱动的应用
一:我在做.net core 应用mongodb的sdk时,查阅了不少资料,故记录下来,以方便查阅.mongodb类库的版本 mongodb driver 2.4.3,一下方法均来自此版本文件 先看看 ...
- mybatis_generator_逆向工程的使用笔记
1:解压mybatis_generator_1.3.1.zip文件. 2:把features,pougins文件夹copy到D:\java\eclipse\eclipse目录下(D:\java\ecl ...
- Idea的快捷键,瞎摸索,开心就好,哈哈哈
前言:如果你有强迫症,换了一个编辑器,最痛苦莫过于快捷键,不顺手了.这里自己瞎摸索的快捷键,贴一下,这里主要以实际应用为主,因为大量介绍的网上已经很多很多,So基本的不再叙述. 分享一下比较不错的Id ...
- Android Studio运行项目报错:Error:null value in entry: annotationProcessorOutputFolder=null的解决方案
一般是在Android studio异常退出(比如强制关机)后,重新打开后运行项目出现该问题. 解决方案 删除项目根目录的.gradle文件夹,然后Clean Project —— Rebulid ...
- LeetCode-450 二叉搜索树删除一个节点
二叉搜索树 建树 删除节点,三种情况,递归处理.左右子树都存在,两种方法,一种找到左子树最大节点,赋值后递归删除.找右子树最小同理 class Solution { public: TreeNode* ...
- Inflated 3D ConvNet 【I3D】
Two-Stream Inflated 3D ConvNet (I3D) HMDB-51: 80.9% and UCF-101: 98.0% 在Inception-v1 Kinetics上预训练 Co ...
- Centos6.5系统压力测试过程大量TIME_WAIT
统计tcp状态的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' netstat -n | awk '/ ...
- 通过impala更改Kudu表属性
开发人员可以通过更改表的属性来更改 Impala 与给定 Kudu 表相关的元数据.这些属性包括表名, Kudu 主地址列表,以及表是否由 Impala (内部)或外部管理. Rename an Im ...
- Selenium自动化测试框架的搭建
说 起自动化测试,我想大家都会有个疑问,要不要做自动化测试? 自动化测试给我们带来的收益是否会超出在建设时所投入的成本,这个嘛别说是我,即便是高手也很难回答,自动化测试的初衷是美好的,而测 ...