自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 收藏
  • 关注

原创 Codeforces Round #781 (Div. 2)题解

Codeforces Round #781 (Div. 2)A. GCD vs LCM如果一个数是奇数,那么就输出(n/2,n/2+1,1,1)如果一个数是偶数,那我们分两种情况考虑如果这个数是4的倍数,那么就输出(2,n-6,2,2)否则就输出((n-2)/2-1,(n/2)/2-1,1,1)#include<cstdio>int main(){ int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&am

2022-04-09 21:16:03 1264 1

原创 NOI2015day1寿司晚宴 状压DP

NOI2015day1寿司晚宴测试点1~3这个写法不唯一。可以2^30枚举之后打表。也可以dp。定义状态dp[i][chs1][chs2]dp[i][chs1][chs2]dp[i][chs1][chs2]表示已经决策了2~i这些数,第一个人选的数的质因数中有chs1(二进制数表示状态),第二个人选的数的质因数有chs2的方案数。这里i可以用滚动数组,也可以用01背包的套路(倒序枚举)优化...

2019-09-05 16:17:57 140

原创 「APIO2011」方格染色 加权并查集

「APIO2011」方格染色正文:对于一张图的状态,如果我们存这张图的每一个点。那么空间复杂度是O(n2)O(n^2)O(n2),肯定不行,更不用说时间了。不断的画图可以发现,如果我们知道了第一行,再知道第二行第一个,我们就可以推出第二行,之后如果知道第三行第一个,就可以推出第三行……也就是我们只要知道一张图的第一列和第一行,就可以知道整张图的状态。然后我们考虑怎么把mp[i][j]mp[...

2019-08-16 10:06:26 238

原创 codeforces 1198E Rectangle Painting 2 网络流最小割求最小点权覆盖

codeforces 1198E Rectangle Painting 2写在前面:下面通过这道题顺便讲一下二分图中最小割求最小点权覆盖的合法性。(如果讲的有问题,欢迎评论区吐槽)这个东西在网络流中有所应用。Part 1由于一次喷漆的代价取决于长度和宽度中短的那个。那么最优的喷漆方案一定是一次喷一列或者一行。(先假设黑点很少)于是如果一个点被覆盖,要么是它所在的列被喷了,要么是它所在的行...

2019-08-11 15:18:26 184

原创 「网络流 24 题」餐巾计划 最小费用最大流

「网络流 24 题」餐巾计划神题!!可以把餐巾分为两类,一类是新餐巾(买来的或是洗过的),一类是旧餐巾(用过的)。发现每一天需要A[i]条新餐巾,也就是会产生A[i]条旧餐巾。于是我们把每一天建两个点,一个相当于存放旧餐巾的站点(存放当天的使用产生的旧餐巾),一个相当于存放新餐巾的站点,流就相当于餐巾的转移。然后就可以把源点看成卖餐巾的点,向每天的新餐巾存放点连一条流量无穷费用为购买费用的...

2019-08-09 11:17:45 136

原创 「HNOI2010」公交线路 矩阵快速幂优化DP

「HNOI2010」公交线路 写在前面:看完题面,这很动态规划,再看一下n的数据范围,可以联想到矩阵快速幂。(可是考场上也就到此为止了)Part1:一开始想到的是一个数量为KPK^{P}KP的状态,就是存当前决策点前P个站分别是哪辆公交车的站点(可以状压)。然后枚举第i个站是那辆公交车的站点进行转移。又对于每辆公交车由于只有离当前决策点最近的站才对后面的决策有...

2019-08-08 21:19:07 166

原创 「NOI2009」植物大战僵尸 网络流最大权闭合子图

「NOI2009」植物大战僵尸正文:有一个不可忽视的点,每个植物除了可以保护它攻击范围内的植物,还可以保护他后面的植物。僵尸吃掉一个植物的前提条件是已经吃掉了保护它的所有植物。然后我们将保护这样一个行为建边(这个时候边是指向被保护的植物)。如果它构成了一个环,那么环上的植物以及被环上植物所保护的植物(直接与间接都算)都不能被僵尸所吃。我们将这个点mark掉。这里可以先拓扑排序之后,剩下不能...

2019-08-03 22:07:45 199

原创 「NOI2009」二叉查找树 区间DP 记忆化搜索

「NOI2009」二叉查找树区间DP 记忆化搜索Part 0有几个性质:1.由于本题是按照数据值排序的二维查找树,那么这颗树的中序遍历是确定的(按照数据值排序后的序列)。故对于一个节点区间,如果我们确定了他的根是什么,就可以确定他的左右子树分别有哪些点。不难发现,这两个子树之间的贡献是没有关联的。故可以以此一步步缩小问题规模。举个例子,先得到中序遍历,对于区间[L,R],如果以i为根,...

2019-07-31 10:22:28 121

原创 [Hnoi2010]City 城市建设 CDQ分治

[Hnoi2010]City 城市建设Part 0怎么也想不到正解会是CDQ分治,很妙的一道题。CDQ分治就是将在线的问题转化为离线问题,将变化的数据变为不变的数据,缩小问题规模。着眼于每个询问间的重复的操作,让一些操作不重复执行多遍。同时还要保证分治的子区间执行的操作的复杂度只能和这个区间的长度有关。Part 1本题我们用分治思想入手。我们不妨按照时间分治。倘若我们当前处理的操作...

2019-07-30 14:44:29 216

原创 [BZOJ2012][Ceoi2010]Pin 容斥

[BZOJ2012][Ceoi2010]Pin第一次在考场上A的容斥题。首先算仅d处不相同的字符串有几对就是求4-d处相同的字符串有几对。记dp[i]dp[i]dp[i]为仅有iii处相同的字符串有几对假设我们要求仅有2处相同字符串对数,那么我们可以先枚举是哪两位相同,然后求出至少这两位相同的字符串对数,记为T。(这个过程可以通过map,字典树来实现(zz的我果断选择字典树))然后我们可...

2019-07-23 13:39:04 213

原创 [BZOJ2013][Ceoi2010]A huge tower

[BZOJ2013][Ceoi2010]A huge tower题解前的吐槽:好神仙啊,考试时想了超过1h都没有想出,赛后看题解才恍然大悟。题中砖A在砖B上面是指砖A在砖B正上面,如果中间各一个砖块则两者没有关联。下面按照解这种方案数题的套路走。如果我们不排序直接一个一个放。前面已经放了i个砖块,现在要放第i+1个砖头(记这个砖头长为L),那么一共有i+1个位置可以放。但如果一个位置合法...

2019-07-23 10:39:29 181

原创 HDU-6578 Blank

HDU-6578 Blank联想(口胡)(可跳过)限制为几种不一样的数—>存每个数最后出现的位置又是一道神仙DP题。但如果思路正确还是挺简单的。由于限制是限制一个区间有几个不同的数,所以我们不必知道每个位置具体放的是什么数。于是我们定义dp[i][j][k][q]dp[i][j][k][q]dp[i][j][k][q]为前i个位置中四种数的最后出现位置为i,j,k,q的方案数这里...

2019-07-23 10:08:00 876

原创 BZOJ[3772]精神污染 二维数点

BZOJ[3772]精神污染本题就是求每条路径被多少条路径所覆盖(也可以求覆盖了多少条路径)。我们对于一条路径,分析怎样的路径可以覆盖它。假设路径A的两个端点为x,y,路径B的两个端点为a,b。(Dfn[a]&lt;Dfn[b] and Dfn[x]&lt;Dfn[y]Dfn[a]&lt;Dfn[b]\ and\ Dfn[x]&lt;Dfn...

2019-07-14 15:08:28 276

原创 ZJOI[2010]基站选址 线段树优化DP

ZJOI[2010]基站选址Part -1这是一个很神仙的dp题,也可以算是线段树优化dp的一道入门题(神仙说的)。Part 0首先得打出暴力的写法。要注意dp的无后效性。(还有注意要仔细看题)定义dp[i][k]dp[i][k]dp[i][k]为对于前iii个村落,建kkk个通讯基站,且最后一个建在第iii个村庄的最小花费。那么就有dp[i][k]=min(dp[j][k−1]+co...

2019-07-13 14:41:16 142

原创 「ZJOI2012」波浪 DP

「ZJOI2012」波浪题解部分由于本题中要求绝对值,但我们可以选定一个顺序加点以去掉绝对值(这里就用从小到大加点)。就可以算出每个点对答案的贡献。(这里的答案不是指方案数,而是指相邻数差的绝对值的和)那么对于一个状态,我们只用知道它有几个联通块,即可,那么它插的位置就是联通块位置+1,然后再分类讨论它是否与两边的联通块相连即可,还有放在边界上的情况。然后我们每加入一个点,它插入的位置有两...

2019-04-22 10:14:56 306

原创 「HNOI2014」世界树 虚树

「HNOI2014」世界树前置技能:虚树。(本题可以通过以下相似的思想用线段树维护子树信息和倍增找中点完成,代码短很多,但本篇题解不涉及)题解部分这种总询问点数不大,但是询问次数多,可以想到用虚树来优化。我们把所有询问点看成关键点建一颗虚树。对于虚树上的点我们是可以求出离它最近的点。那么对于那些被隐藏的点。这里有两种被隐藏的点。(以下为有根树)其中黑色和橙色的为虚树上的点,灰色的就是...

2019-04-21 19:56:53 410

原创 「APIO2014」序列分割 斜率优化

「APIO2014」序列分割 Part 0(P10的写法,巨佬请忽略)可以发现其实只用知道分成那几个块即可,不用知道中途分裂的顺序。记R[i]为第i个元素后面最近的裂痕在哪个元素的后面(若这个元素后面无裂痕就为n+1),sum[i]为1~i的元素的和,那么第i个元素对答案的贡献就是val[i]∗(sum[n]−sum[R[i]])val[i]*(sum[n]-sum[R[i]])val[i]...

2019-04-18 13:37:36 154

原创 「APIO2014」连珠线 树形DP

「APIO2014」连珠线Part0O(n2)O(n^2)O(n2)的暴力我们看一下这个这一个连珠线的产生过程。确定了一个根后,我们定义折链为LCA不为这两个点的链。就像下图这样。我们定义中心点为一对蓝线产生时加入的点,每个点只能为一对蓝线产生时加入的点。如果我们确定一个根,一个个在原有的点上往下加点时我们是不会加出折链的。故如果我们确定一个点为两个蓝线的中点,只有可能是它的父亲与他...

2019-04-18 13:35:44 256

原创 「NOI2014」购票 数据结构+斜率优化

「NOI2014」购票 Part 0测试点1,2,3。枚举,复杂度O(n2)O(n^2)O(n2)Part 1对于t=0的测试点。我们看一看这个状态转移式子。记dp[i]为i这个点到达SZ市所需的最小资金dis[i]为SZ市到这个点i的路径长度。我们要求t这个点的答案,那么就有。(s为t到根路径上的点)dp[t]=min⁡(dp[s]+p[t]∗(dis[t]−dis[s])+q[t...

2019-04-15 22:06:38 273

原创 「JOISC 2014 Day1」有趣的家庭菜园

「JOISC 2014 Day1」有趣的家庭菜园前置技能:树状数组。题解部分:如果我们知道了目标序列,我们就可以构造一个序列P,它的每一个元素就是目标序列这一位置的元素在原序列的位置,那么答案就是原位置序列[也就是{1,2,3,···,n}]通过冒泡排序达到目标序列所需的交换次数目。而冒泡排序的交换次数就是P的逆序对的数量。由于要满足那两个条件,那么最后得到的序列一定是一个单增,单减或是先...

2019-04-11 22:20:36 476

原创 「JOISC 2014 Day1」巴士走读

「JOISC 2014 Day1」巴士走读题解部分:(如果不怎么喜欢看推导的人可以直接看下面的关键部分,在段尾会有标注(或者看完定义直接看代码))本题让我们求到达点n需要最晚何时到达点1,我们可以看成为了乘坐到达点n的车,最晚需要何时到达点1。对于一辆终点为点n的车X,我们必须在它开走之前到它的始发站P,于是我们必须知道需要在X的发车时间之前到达这个点最晚需要何时到达点1。而这和到达这个P...

2019-04-11 20:38:52 346

原创 JOISC 2016 Day 2雇佣计划

前置技能:树状数组切分,相信大家都会写的。题解部分:题目就是让我们求能力值大于等于B的人构成的联通块的个数。假设一开始有一片平原,然后在平原上一个位置对应一个人。对于每一次询问,如果一个人的能力值满足要求,他就会形成一座山,如果不行就还是平原。假设一次询问后,这片地方是这样的:(假设询问的B为4)我们可以发现,联通块的数量就是沟壑的数量除以2,而分析每一个沟壑,我们可以知道它出现的时...

2019-04-10 14:03:42 418

原创 GRE Words HDU - 4117 Fail树 AC自动机

GRE Words HDU - 4117前置技能:AC自动机,线段树,DPPart 0这道题很好的体现了Fail数组的作用。如果我们已经知道了每个字符串包含哪个字符串,那么剩下的就可以用动态规划来解。状态为:DP[i]表示已经决策了1~i的字符串,并且选i这个字符串时得到的最大重要值。状态转移方程为DP[i]=max⁡(DP[j])+val[i] (S[j]∈S[i])DP[i...

2019-03-27 21:52:53 134

原创 Constructing Chimney HDU - 4332 DP+矩阵快速幂

Constructing Chimney HDU - 4332前置需求:DP,矩阵快速幂Part 0DP的核心思想就是“层”的定义。而本题有一个较为明显的方向,就是本题中的层。对于一个烟囱,我们可以一层一层的搭。对于每一层,我们知道了这层有那几个地方已经被竖着摆放的砖头放置后,就可枚举推出放满这层后的下一层的状态。而每层的状态都可以状态压缩。Part 1举个栗子原始状态(首先,这个...

2019-03-16 19:31:45 102

原创 高斯消元模板&高斯消元·一 HihoCoder1195

高斯消元模板&amp;高斯消元·一 HihoCoder1195Part 0这道题就是高斯消元的板子题。高斯消元,就是用来解一个多项式方程的算法。当然还能判断这个方程是有多组解还是无解。下面来稍微解释一下它的原理。Part 1首先先想一想我们是怎么解多元一次方程组的,从中有没有什么通用解法。高斯消元其实就是这样一个通用解法。有那么多个未知数,我们可以一个一个进行消去。假设初始有m个n元...

2019-03-06 21:15:05 137

原创 Mart Master II HDU - 5016点分治

Mart Master II HDU - 5016点分治题意有一棵树,树上的每一个点可以看做一个小镇,有的小镇有集市,有的没有,每一个小镇都被距离它最近且编号(树上的编号)最小的集市所服务。现在要再建一个集市,问这个集市最多可以服务多少个小镇。Part 0初始状态中,每一个居住区都会被一个集市服务,而每个居住区被哪个集市服务我们是可以通过两遍DFS所预处理出来的,也就是利用下面这个浅显的性...

2019-02-28 19:36:50 206

原创 Query on a tree IV SPOJ - QTREE4动态点分治

Query on a tree IV SPOJ - QTREE4 前置技能:点分治,动态点分治。Part 0首先,对于确定了路径上的一个点(也就是枚举重心的过程),那么如果这一条路径是一条收尾都是白色节点的路径,那么它由两条由重心出发的重点为白色节点的链拼接而成。故对于每个重心都要存每个以重心的一个端点,另一个端点为白色端点的链的信息,这个重心的答案(这个重心所管辖的区域以这个经过这个重心的...

2019-02-25 20:05:48 244

原创 HDU 4916 Count on the path

HDU 4916 Count on the pathPart 0不要理题目里说的让你用手写读入挂,会TLE,用G++还有scanf就行了。(超级读入挂没事)C++也可以AC,不用加栈外挂(如果实在栈溢出也可以加)Part 1一个性质:假如这两个点的路径不经过点1,那么答案就是1。那么我们以1为根结点将这颗无根树变为有根树。若这条路径不经过点1,那么答案就是除路径外的最小值(这不废话)。...

2019-02-11 21:17:16 305

原创 HDU 4670 Cube number on a tree 点分治

HDU 4670 Cube number on a treePart 0怎样一个数是立方数。如果一个数是立方数,那么它分解质因数之后,每种质因子的出现次数都是三的倍数。由于所有数只由K个质数组成,而K的大小不超过30,那么每个数就可以表示成一个三进制数来表示每种质因子在其的质因子中出现次数模3的余数。然后一个立方数就是表示其的三进制数为0,然后知道一个数的三进制表示,就可以知道什么与它相乘可...

2019-02-10 21:51:47 153

原创 点分治模板 and Tree POJ-1741 题解

点分治模板 and Tree POJ-1741 题解感觉这道题挺适合点分治入门的。Part 0点分治可以解决很多询问路径长度之类的问题。一般的路径长度问题(就如本题),假如数据范围小,就可以先预处理出每个点到根的距离,再枚举路径的两端点,求出LCA,就可以算出每个点对的距离。但这要O(n2⋅log⁡(n))O(n^2 \cdot \log(n))O(n2⋅log(n))的复杂度啊,还是太...

2019-02-10 21:03:34 216

原创 大根堆 HYSBZ - 4919 线段树合并

Part 0​由这题,可以联想到最长不下降子序列。对于每个节点,我们定义DP[i]为这个子树内所有节点堆顶元素等于i时的最大的堆的大小。我们可以把这个数组放在线段树上维护。线段树的叶子节点存的就是DP[i]。线段树节点[L—R]存的是这段区间DP值的最大值。Part 1线段树合并时就可以一直更新这个DP数组。由于每个子节点是互不干扰的,故合并时记录两颗线段树前面的DP最大值。(若当前操作区间...

2019-01-19 19:49:15 292

原创 DZY Loves Sorting HDU - 5649 线段树合并和分裂

Part 0这道题就是[Tjoi2016&amp;Heoi2016]排序的升级版。可以直接改成多Case过去的。本题有两种做法,一种是普通线段树+二分(复杂度n⋅log⁡2(n)n \cdot \log^{2}(n)n⋅log2(n))还有的就是现在要讲的线段树合并+线段树分裂(复杂度n⋅log⁡2(n)n \cdot \log^{2} (n)n⋅log2(n))Part 1其实讲一个区...

2019-01-18 21:28:46 242

原创 魔法少女LJJ HYSBZ - 4399 线段树合并

Part 0这道题其实就是一个码农题,考的是代码功底,没有太多思维难点。注意题目的HINT说的请认真阅读题面,你会发现c≤7c \leq 7c≤7然后再看一下询问。剩下唯一的难点只剩下维护一个联通块内所有节点权值的积。首先,要知道以下公式。​ ln⁡ab=ln⁡a+ln⁡b\ln ab = \ln a + \ln blnab=lna+lnbln⁡\lnln函数是单调的,故判断...

2019-01-18 20:38:23 164

原创 七彩树 HYSBZ - 4771线段树合并

Part1本题是查找一个节点x的字树内深度与其相差不超过d的节点有多少种颜色。如果单纯考虑有多少个点,应该如何求,如何维护深度在一个区间内且是x的后代的信息呢?我们可以每个节点用一颗以下标为权值的线段树来维护(后面记为线段树X)。用线段树合并来完成所有信息的处理。但如何查找深度在一个区间里的信息呢?我们可以将每个节点重新以深度编号,编号与深度正相关(也就是编号越大的点深度越大),在预处理处每个深...

2019-01-18 19:30:11 299

原创 rausen loves cakes HDU - 5997线段树合并

Part1​ 感觉本题与梦幻布丁(题解)十分相似。只不过由全局查找变为区间查找。若是此时对于每种颜色都查询一遍区间内颜色段数复杂度必定超。但由梦幻布丁这道题做铺垫后,可以想到维护一个区间内所有颜色的段数,可以另外拿一个线段树来维护,查询时在这个线段树上回答即可。Part2​ 为了快速确定某两个相邻的点是否颜色相同,可以用并查集。把每种颜色的代表点存下来(也就是随便存下一个这种颜色的点的位置)...

2019-01-11 16:38:05 232

原创 梦幻布丁HYSBZ-1483 线段树合并

Part 1​ 本题要求当前有多少段颜色,其实可以看成有多少个相同颜色的联通块,我们可以一个一个颜色进行计数。在颜色转换时利用线段树合并(归并思想)来维护当前有多少个相同颜色的联通块。Part 2​ 对于每种颜色,可以用一颗动点线段树来维护其颜色段数,每个叶子节点存的就是这个节点是否为当前这种颜色。然后在Up操作里维护当前区间内这种颜色的段数。同时还要记录每个区间左端点以及右端点是否为这种颜...

2019-01-11 15:05:04 178

原创 IOI2009 旅行商DP

Part 0本题的展销会参加顺序是由展销会开始的时间决定的。故本题决策的时间点是单调递增的,就是说每个时间点都只会被它前面决策的时间点所影响,并且影响它后面的时间点的决策,故可以用动态规划。Part 1我们先解决时间点都不同的情况。首先按展销会开始时间排序,记dp[i]dp[i]dp[i]为已经决策完前i−1i-1i−1个展销会去不去且去第iii个展销会的最小花费。因为旅行商从家出发,最后要...

2018-10-26 22:10:56 156

原创 斜率优化入门带简单的总结 Print Article HDU3507

总结在最下面!!!题目链接:HDU-3507主要思路:题目好像忘了说。首先要会的DP。状态转移方程是;其中。将转移方程展开再整理得出(其中是定值故拿出来)令故。所以就在求的最小值,可以看出来这和函数解析式很像。故我们设,所求值就是,也就是这个函数和y轴相交的y坐标。然后开始分析。不难看出这三个变量的值是单调递增的(sum数组单调递增不说了,dp数组的...

2018-10-20 08:15:30 178

原创 NOIP2017逛公园 记忆化搜索+判环+最短路

题目链接:洛谷-3953主要思路:由于这道题K的数值范围较小,故可以直接枚举K来求答案。答案就是起点到终点的为d,d+1,d+2,...,d+K的路径的条数总合。           联想到之前一些在路径上有消耗的图论题,我们可以把这个K也当做是一个被消耗的东西,就像钱一样(以下就当钱讲好了)。故我们可以定义dp[i][j]为从i这个点出发走比他到终点的最短距离大j的路径有多少条。接下...

2018-10-08 13:53:36 399

原创 NOIP2017 列队 动点线段树

题目链接:列队主要思路:和前面的思路有些相似。首先,若用数组存地图(即排列的状态)肯定会MLE,但是若本次查询为第x行,第y行,记这个学生的编号为X。若那么只用在最后一列操作即可。在最后一列建一颗线段树(大小为n+q),初始化每个位置上的数值都为1。每次找这一列的第k个位置就找第一个前面有k个1的位置(包括他自己)并将该位置数值赋值为0,这样找到的位置的值在赋值为0前时一定...

2018-10-02 22:06:59 189

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除