
BZOJ题解
oier_forever
这个作者很懒,什么都没留下…
展开
-
BZOJ 1878(离散化+线段树)
题面传送门分析首先我们观察到区间范围较大,而区间个数较少,考虑离散化,将所有询问按照右端点进行排序 离散化之后研究区间颜色个数变化的规律 当我们处理到第a[i]个段时,设a[i]上一次出现的地方为last[a[i]],则last[a[i]]之前的颜色出现次数不受影响. 首先遍历右端点范围r,用线段树维护每一位到r的区间中有多少种颜色,记为c 则处理到第a[i]个段时,将(las...原创 2018-08-22 20:06:12 · 143 阅读 · 0 评论 -
BZOJ 3252题解(贪心+dfs序+线段树)
题面传送门分析此题做法很多,树形DP,DFS序+线段树,树链剖分都可以做 这里给出DFS序+线段树的代码 我们用线段树维护到根节点路径上节点权值之和的最大值,以及取到最大值的节点编号x 每次从根节点走到x,将点归0,再把最大值累加 然而,修改操作怎么做呢? 这里当然可以树剖,但是还有代码量更小的做法 从x往父亲跳,每次将子树中的节点值都-v(v为当前节点的权值,当前节点权值...原创 2018-08-22 20:17:21 · 197 阅读 · 0 评论 -
BZOJ 1085(IDA*)
题面传送门分析首先,直接搜索肯定会TLE 很容易想到用迭代加深的方法,限定搜索深度 但是,这样仍然不够,需要用启发式的方法优化 我们设计一个估价函数f(x)=g(x)+h(x)f(x)=g(x)+h(x)f(x)=g(x)+h(x) g(x)g(x)g(x)是初始状态到当前状态的实际代价 h(x)h(x)h(x)是当前到目标的估计代价 如果f(x)=g(x)+h...原创 2018-08-17 08:30:17 · 190 阅读 · 0 评论 -
BZOJ 4552(二分+线段树+思维)
题面传送门分析此题是道好题! 首先要跳出思维定势,不是去想如何用数据结构去直接维护排序过程,而是尝试二分a[p]的值 设二分a[p]的值为x 我们将大于x的数标记为1,小于等于x的数标记为0 则整个序列只由01组成,记为b 将一个区间升序排序,则相当于将1全部移到右边,0全部移到左边,降序排序反之 例: a={1,6,5,2,4,3}.x=4 标记后的序列b为{0,1,...原创 2018-08-29 17:03:48 · 209 阅读 · 0 评论 -
BZOJ 1875(DP+矩阵快速幂)
题面传送门分析容易想到根据点来dp 状态转移方程为dp[i]=∑(i,j)∈Edp[j]dp[i]=∑(i,j)∈Edp[j]dp[i]=\sum _{\left( i,j\right) \in E}dp\left[ j\right] 但这样得出的结果是错误的,因为它没有考虑一个点经过多次的情况因此,我们按边来dp,因为每条边只能经过一次,所以不会出现上面的问题 将无向边...原创 2018-08-29 17:48:40 · 252 阅读 · 0 评论 -
BZOJ 4987 (树形DP)
###题面https://www.lydsy.com/JudgeOnline/problem.php?id=4987###分析先考虑贪心,显然k个节点形成一棵树求出树的直径,显然直径应该只被经过1次(最长的边应该走最少次数),其他非直径上的边被经过2次整体的形状应该类似一条链上接着许多子树考虑树形DP子状态:dp[x][i][j](j∈{0,1,2})dp[x][i][j]( j\i...原创 2018-10-24 19:54:33 · 707 阅读 · 0 评论 -
BZOJ4990 (LCS转LIS)
题面分析首先可以看出一个简单的DPdp[i][j]表示序列a前i个与序列b前j个连线数量dp[i][j]=max(dp[i−1][j],dp[i][j−1],dp[i−1][j−1](∣a[i]−b[j]∣<=4))dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i-1][j-1]( \left| a[i]-b[j]\right|<...原创 2018-10-24 20:02:00 · 258 阅读 · 0 评论