如果某个格子的积水量超过了该格子的某个挡板高度,那么挡板另一端的积水量就会与其相同。看起来是一个不断合并的过程,考虑并查集。枚举深度,维护每个连通块内的方案数,深度超过某挡板高度时,将两端的连通块合并,即方案数相乘。再加上该连通块均为当前深度的这种方案。这样复杂度即为O(nmHα)或O(n2m2α)。

  注意到每次更新所有连通块的答案并没有意义,于是可以进一步优化,对每个连通块存储其已被更新到的深度,需要将其合并时再实际更新。复杂度即为O(nmα)。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 1000010
#define P 1000000007
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,h,fa[N],ans[N],cur[N],t;
struct data
{
int x,y,z;
bool operator <(const data&a) const
{
return z<a.z;
}
}edge[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int trans(int x,int y){return (x-)*m+y;}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj5101.in","r",stdin);
freopen("bzoj5101.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read(),h=read();
for (int i=;i<=n*m;i++) fa[i]=i,ans[i]=;
for (int i=;i<=n;i++)
for (int j=;j<m;j++)
t++,edge[t].x=trans(i,j),edge[t].y=trans(i,j+),edge[t].z=read();
for (int i=;i<n;i++)
for (int j=;j<=m;j++)
t++,edge[t].x=trans(i,j),edge[t].y=trans(i+,j),edge[t].z=read();
sort(edge+,edge+t+);
for (int i=;i<=t;i++)
{
int p=find(edge[i].x),q=find(edge[i].y);
if (p!=q)
{
ans[p]+=edge[i].z-cur[p];
ans[q]+=edge[i].z-cur[q];
fa[q]=p;ans[p]=1ll*ans[p]*ans[q]%P;cur[p]=edge[i].z;
}
}
cout<<(ans[find()]+h-cur[find()])%P;
return ;
}

最新文章

  1. extends 和 implements
  2. [.net 面向对象编程基础] (20) LINQ使用
  3. C#使用sharppcap实现网络抓包
  4. nrpe 在ubuntu上安装遇到的问题
  5. HDU 5512 Meeting 博弈论
  6. 在COM接口中不要使用同时出现只是大小写不同的名字作为属性名、函数名或者参数名
  7. python之6-5偏函数
  8. Java向上转型的意义
  9. The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
  10. 使用FileUpload实现Servlet的文件上传
  11. nnet3的并行化训练
  12. Hadoop记录-Yarn命令
  13. SVM学习笔记4-核函数和离群点的处理
  14. easyui的datagrid分页写法小结
  15. influxdb 配置文件注释
  16. openstack系列文章(二)
  17. 深入浅出SharePoint2010——请假系统无代码篇之工作流设计
  18. shell_03
  19. linux学习笔记12--命令less
  20. cube中的判断类型

热门文章

  1. anaconda 及python pip安装 类库等问题收集
  2. Linux shell(3)
  3. 【日常训练】数据中心(CSP 201812-4)
  4. 宏基4752g 开机进度条卡到75%左右,解决办法
  5. jmeter—操作数据库
  6. 使用Xshell远程访问tensorboard
  7. python包管理工具pip
  8. 010 --MySQL查询优化器的局限性
  9. 使用AD对Linux客户端进行身份验证
  10. 高可用OpenStack(Queen版)集群-17.一些问题