题中所给的判定条件似乎比较神奇,那么用严谨的话来说就是对于两个格子(x,y)和(x',y'),如果满足:
1.$x\le x'$;
2.从(x,y)通过x,x+1,……,n行,允许向四个方向走,不允许经过石头的位置/画外,可以到达(x',y')
若(x,y)有水,那么(x',y')也有水
这个性质似乎并没有什么用,考虑对于$x=x'$的情况,相当于这些y必须都是同一个状态,容易想到一个思路:从下往上进行枚举,用一个并查集维护这一行的所有点,然后将这一行与下一行相邻的点连起来,形成这一行的并查集
通过并查集,可以将同一行内在同一个并查集内的点缩起来,并向下面的点连边,容易发现一定是森林
(证明:如果存在上面两个点同时指向其中一个点,那么这两个点肯定会缩起来)
那么题中的条件就有意义了:相当于如果一个点的根选择了1,那么整个子树都必须选1,求方案数,树形dp即可

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 #define mod 1000000007
5 int V,n,m,ans,f[N*N],dp[N*N],bl[N][N];
6 char s[N][N];
7 int find(int k){
8 if (k==f[k])return k;
9 return f[k]=find(f[k]);
10 }
11 void merge(int x,int y){
12 if (find(x)==find(y))return;
13 dp[find(y)]=1LL*dp[find(x)]*dp[find(y)]%mod;
14 f[find(x)]=find(y);
15 }
16 int main(){
17 scanf("%d%d",&n,&m);
18 for(int i=1;i<=n;i++)scanf("%s",s[i]);
19 for(int i=n;i;i--){
20 int las=V;
21 for(int j=1;j<m-1;j++)
22 if (s[i][j]=='.'){
23 if (s[i][j-1]=='#'){
24 dp[++V]=1;
25 f[V]=V;
26 }
27 bl[i][j]=V;
28 if (s[i+1][j]=='.')merge(bl[i+1][j],V);
29 }
30 for(int j=las+1;j<=V;j++)
31 if (find(j)==j)dp[j]=(dp[j]+1)%mod;
32 }
33 ans=1;
34 for(int i=1;i<=V;i++)
35 if (find(i)==i)ans=1LL*ans*dp[i]%mod;
36 printf("%d",ans);
37 }

[loj3246]Cave Paintings的更多相关文章

  1. UVa OJ 175 - Keywords (关键字)

    Time limit: 3.000 seconds限时3.000秒 Problem问题 Many researchers are faced with an ever increasing numbe ...

  2. 清明欢乐赛(USACO选题)

    总传送门 T1. [USACO19JAN] Redistricting P luogu P5202 思路: 这种每次选出段长有个上限\(k\)的常常是和单调队列有关. 这里是单调队列优化dp 不过一开 ...

  3. USACO 刷题小记

    \(\text{High Card Low Card}\) USACO2015DEC Platinum T2 贝西和艾尔西在玩游戏.有 \(2n\) 张牌,牌上的数字是 \(1\) 到 \(2n\) ...

  4. 【BZOJ2049】 [Sdoi2008]Cave 洞穴勘测 LCT/并查集

    两种方法: 1.LCT 第一次LCT,只有link-cut和询问,无限T,到COGS上找了数据,发现splay里的父亲特判出错了(MD纸张),A了,好奇的删了反转T了.... #include < ...

  5. 【bzoj2049】[Sdoi2008]Cave 洞穴勘测 link-cut-tree

    2016-05-30  11:04:51 学习了link-cut-tree 二中神犇封禹的讲义感觉讲的超级清晰易懂啊(没有的可以q窝 算是模板吧 #include<bits/stdc++.h&g ...

  6. BZOJ-2049 Cave洞穴勘测 动态树Link-Cut-Tree (并查集骗分TAT)

    2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 5833 Solved: 2666 [Submit] ...

  7. DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave

    题目传送门 /* 题意:告诉起点终点,踩一次, '.'变成'X',再踩一次,冰块破碎,问是否能使终点冰破碎 DFS:如题解所说,分三种情况:1. 如果两点重合,只要往外走一步再走回来就行了:2. 若两 ...

  8. 【BZOJ】2049: [Sdoi2008]Cave 洞穴勘测(lct/并查集)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2049 bzoj挂了..在wikioi提交,,1A-写lct的速度越来越快了-都不用debug-- 新 ...

  9. 【BZOJ】【2049】【SDOI2008】洞穴勘测 Cave

    LCT 哦……LCT的一道更水的裸题,适合学习access,link,cut等基本操作(其实这三个不是在一个层面上的?不要在意这些细节……) /**************************** ...

随机推荐

  1. 从零入门 Serverless | 一文搞懂函数计算及其工作原理

    作者 | 孔德慧(夏莞) 阿里云函数计算开发工程师 什么是函数计算 大家都了解,Serverless 并不是没有服务器,而是开发者不再需要关心服务器.下图是一个应用从开发到上线的对比图: 在传统 Se ...

  2. 【.Net vs Java? 】 先来看一下Java和C#的数据类型区别。

    新工作.Net和Java都要做,早期也做过一段Java的项目,但没有系统的深入学习过.一直觉得这两门语言估计是最相近的两门语言了,好多代码可以说直接拷过来都不带报错的,但仔细推敲还是有很多的不同. 1 ...

  3. 配置Internal Load balancer中VM的外网访问

    当在Azure中部署SQL VM时,处于安全考虑,不会配置VM的Public IP,会禁止外网的进出站访问,只允许从内部VNET,或者特定的内部IP访问.特别是当使用Azure Internal Lo ...

  4. Rigidbody钢体移动时抖动问题

    Rigidbody移动时抖动问题 撞墙抖动 Unity中物体移动有非常多的方式: 比如: transform.position += dir*speed*Time.deltaTime; transfo ...

  5. 洛谷3203 弹飞绵羊(LCT)

    据说这个题当年的正解是分块qwq 根据题目所说,对于题目中的弹力系数,就相当于一条边,那么对于"跳出去"这个限制,我们可以选择建造一个新点\(n+1\)表示结束,那么每次,求一个点 ...

  6. LuckySheet一款在线Excel使用心得

    1.LuckySheet简介 Luckysheet ,是一款国产的纯JS实现的类似excel的在线表格,功能强大.配置简单.完全开源. 开源地址 https://gitee.com/mengshuke ...

  7. jsonp和cors解决跨域

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.对于JSON大家应该是很了解了吧,不是很清楚的朋友可以去json.org上了解下,简单易懂. 1.什么是跨 ...

  8. javascript-jquery选择器

    jquery选择器用来获得jquery对象 我们用一个实例来演示jquery与原生的区别 <div id="title">123</div>原生获得元素的方 ...

  9. 【二食堂】Alpha - Scrum Meeting 5

    Scrum Meeting 5 例会时间:4.15 12:30 - 13:00 进度情况 组员 昨日进度 今日任务 李健 1. 主页搭建结束issue2. 与后端协商确定接口的设计3. 查找文本区域功 ...

  10. CSS 奇技淫巧 | 巧妙实现文字二次加粗再加边框

    本文将通过一个实际的业务需求,讲解如何实现 极端场景下文字加粗加边框效果 文字多重边框的效果 需求背景 - 文字的二次加粗 今天遇到这样一个有意思的问题: 在文字展示的时候,利用了 font-weig ...