[loj3246]cavepaintings(代码片段)

pywbktda pywbktda     2023-04-23     138

关键词:

题中所给的判定条件似乎比较神奇,那么用严谨的话来说就是对于两个格子(x,y)和(x‘,y‘),如果满足:
1.$xle 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 
View Code

 

p3246[hnoi2016]序列单调栈+莫队(代码片段)

原题链接:https://www.luogu.com.cn/problem/P3246题意给你一个数列,每次询问一个区间,问当前区间的所有子区间的最小值之和分析非常典中典的问题,因为是询问所有子区间,自然我们想到固定一个端点,然后... 查看详情

usaco2020januarycontest,platinumproblem1.cavepaintings(代码片段)

题目链接:http://usaco.org/index.php?page=viewproblem2&cpid=996提交评测:https://www.luogu.com.cn/problem/P6008 题解:  一开始,我想着从左往右进行统计方案数,然后发现转移方程太难写。从下往上进行统计就方便很多。首先要明白,... 查看详情

poj3246game

GameTimeLimit: 4000MS MemoryLimit: 65536KTotalSubmissions: 2707 Accepted: 488DescriptionWintokklikesplayinggamesonconvex-hull.Oneday,Dragonwantstotesthim.Dragonhasdrawn&n 查看详情

前端学习(3246):react的生命周期getsnap

  查看详情

bzoj3246ioi2013—dreaming

www.lydsy.com/JudgeOnline/problem.php?id=3246 (题目链接)题意:给出一棵不完全的树,要求在树上连最少的边使得所有点联通,并且使得两点件最大距离最小。Solution   今天考试题,有情况没考虑到。。。   http://www.ccf.org.c... 查看详情

[loj]数列分块(代码片段)

数列分块入门1https://loj.ac/problem/6277区间加+单点查询#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;constintN=5e4+10;#definegcgetchar()inlineintread()intx=0;charc=gc;while( 查看详情

59:loj#10215(代码片段)

$des$https://loj.ac/problem/10215$sol$exgcd检查$code$#include<iostream>#include<cstdlib>#include<algorithm>#include<cstring>#include<cstdio>usingnamespacestd;#definegcgetch 查看详情

loj10195.「一本通6.1练习2」转圈游戏(loj2608)(代码片段)

思路:  简单的数学题。#include<cstdio>#include<iostream>usingnamespacestd;longlongquickpow(longlonga,longlongb,longlongp)longlongres=1;while(b)if(b&1)res=res*a%p;a=a*a%p;b>>=1;returnres 查看详情

p3246[hnoi2016]序列(查询l-r中所有区间的最小值之和)(代码片段)

多校时做到了查询区间l-r中所有区间的最大值与最小之和的题目,有好多细节不太会处理,去看题解发现是一道差不多的原题,于是打算先把原题补一下。题解:ST表+单调栈+莫队看到计算区间最小值之和... 查看详情

loj#6281.数列分块入门5(代码片段)

...zoj花神游历各国是一样的...但是loj没有卡掉不完全优化的代码。  基础操作就不说了(同分块4),主要讲优化吧:   查看详情

loj2005相关分析(代码片段)

Loj2005相关分析大力把式子拆开.\[\beginaligneda&=\frac\sum_i=L^R(x_i-\barx)(y_i-\bary)\sum_i=L^R(x_i-\barx)^2\&=\frac\sum_i=L^R(x_iy_i+\barx\bary-\barxy_i-\baryx_i)\sum_i 查看详情

loj6285.数列分块入门9(代码片段)

链接:https://loj.ac/problem/6285 思路:离散化处理下就好了,具体解释在代码里、 ps:小新新别看了,你学不会的 实现代码:#include<bits/stdc++.h>usingnamespacestd;constintM=1e5+10;intn,block,idx,a[M],bl[M],f[510][510],val[M],c 查看详情

loj6280数列分块入门4(代码片段)

链接:https://loj.ac/problem/6280思路:多设置一个数组sum去存区间值的和就好了,因为数据范围比较大,需要开longlong.实现代码;#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstllM=1e5+10;llsum[M],a[M],tag[M],bl[M],n,block;void 查看详情

loj6282.数列分块入门6(代码片段)

...入数据过大时,我们在将整个vector重新分块就好了。实现代码:#include<bits/stdc++.h>usingnamespacestd;constintM=2e5+10;vector<int>ve[1005];i 查看详情

loj6059sum(代码片段)

Portal-->loj6059Solution??  看过去第一反应是。。大力数位dp!然后看了一眼数据范围。。。?  但是这没有什么关系!注意到我们不需要考虑前导零了,可以直接快乐dp?  状态还是能继续用的,记(f[i][j][k])表示从左往右数的... 查看详情

loj6281.数列分块入门5(代码片段)

...下是否全部变成了0或者1,如果全变了就不处理 实现代码:#include<bits/stdc++.h>usingnamespacestd;#definelllonglongconstintM=1e5 查看详情

loj10139.「一本通4.5练习1」树上操作(loj2125.「haoi2015」树上操作)(代码片段)

思路:  第二遍dfs时记录end[x]为在结点序列中以x为根的子树最后访问的节点,写个线段树标记下传即可。与值有关的数据注意longlong#include<cstdio>#include<iostream>#include<vector>#include<cmath>#include<string>usingnamespa... 查看详情

Azure 管道失败并显示警告 MSB3246:已解析的文件具有错误的图像

】Azure管道失败并显示警告MSB3246:已解析的文件具有错误的图像【英文标题】:AzurepipelinefailswithWarningMSB3246:Resolvedfilehasabadimage【发布时间】:2021-07-1720:12:03【问题描述】:我无法使用Azure在.Net5.0中构建一个引用简单DLL的解决方... 查看详情