![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树形DP
_Ark
这个作者很懒,什么都没留下…
展开
-
NOIP2018 保卫王国(动态DP)
题意求最小权值点覆盖。mmm次询问,每次给出两个点,分别要求每个点必须选或必须不选,输出每次的最小权值覆盖或者无解输出−1-1−1题解强制选或者不选可以看做修改权值为±∞\pm\infin±∞。那么就是这道板题了。CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;template...原创 2019-10-30 18:58:47 · 407 阅读 · 0 评论 -
Luogu 4751 动态DP 模板
题面动态求最大独立集题解树剖后用矩阵转移。具体见Tweetuzki的洛谷博客CODE#include <bits/stdc++.h>using namespace std;typedef long long LL;char cb[1<<15],*cs=cb,*ct=cb;#define getc() (cs==ct&&(ct=(cs=cb...原创 2019-10-28 17:26:50 · 214 阅读 · 0 评论 -
CSP模拟赛 Repulsed(树形DP)
题面⼩ w ⼼⾥的⽕焰就要被熄灭了。 简便起⻅,假设⼩ w 的内⼼是⼀棵 n − 1 条边,n 个节点的树。 现在你要在每个节点⾥放⼀些个灭⽕器,每个节点可以放任意多个。 接下来每个节点都要被分配给⼀个⾄多 k 条边远的灭⽕器,每个灭⽕器最多能分配给 s 个节 点。 ⾄少要多少个灭⽕器才能让⼩ w 彻底死⼼呢?题解树形DP,由于k≤20k\le 20k≤20,用f[i][j]f[i][j]f...原创 2019-10-26 16:44:29 · 339 阅读 · 0 评论 -
BZOJ 3162 / Luogu P4895: 独钓寒江雪 树hash+DP
题意给出一棵无根树,求本质不同的独立集数模100000000710000000071000000007的值。n≤500000n\le 500000n≤500000题解如果是有根树就好做多了。然而无根树可以找重心作为根,转化为有根树。那么考虑有根树的本质不同的独立集数怎么求。直接dpdpdp就行了。用f[i][0]f[i][0]f[i][0]表示iii不选的独立集数,f[i][1]f[i...原创 2019-10-17 18:53:24 · 133 阅读 · 0 评论 -
[NOI2013]快餐店 / CF835F Roads in the Kingdom (基环树)
题意一颗基环树,选一对点使得这两个点的最短距离最大。题解相当于找基环树的直径,但是这个直径不是最长链,是基环树上的最短距离。然后不会做。然后看了ljh_2000的博客。然后会了。这道题最难的就是为什么枚举断边(i→i+1)(i\to i+1)(i→i+1)后,求出最长链是取min\minmin。实际上是因为这个最长链是求的经过了环的最长链,但是经过了环的最长链不一定是题目中要求的最...原创 2019-10-17 15:06:38 · 163 阅读 · 0 评论 -
BZOJ 1495 [NOI2006]网络收费(暴力DP)
题意给定一棵满二叉树,每个叶节点有一个状态0/10/10/1,对于每两个叶节点i,ji,ji,j,如果这两个叶节点状态相同但他们的LCALCALCA所管辖的子树中的与他们状态相同的叶节点个数较少(少于1/21/21/2),则会产生2fij2f_{ij}2fij的代价,如果状态不同,则产生fijf_{ij}fij的代价,如果状态相同且LCALCALCA管辖子树中与他们状态相同叶节点个数较多,则...原创 2019-10-16 13:30:19 · 179 阅读 · 0 评论 -
BZOJ2616 SPOJ PERIODNI(笛卡尔树 + DP)
题意N,K≤500,h[i]≤106N,K\le 500,h[i]\le10^6N,K≤500,h[i]≤106题解建立出小根堆性质的笛卡尔树,于是每个节点可以代表一个矩形,其宽度为子树大小,高度为该节点记录的那一列高度-父节点那一列高度。然后就可以随便DP了。如果不会笛卡尔树,看看这张图,再看看代码就懂了(简单的笛卡尔树)。代码#include <bits/stdc++....原创 2019-10-13 20:06:21 · 212 阅读 · 0 评论 -
BZOJ 4033: [HAOI2015]树上染色 (树形DP)
题意n个点的树,选k个黑点,求黑点之间两两距离之和加上白点之间两两距离之和的最大值。题解感觉两两距离之和没法统计。但是我们可以对每条边统计左边和右边各自每种颜色的点数,乘起来就是这条边要被统计到的次数。那么就直接树形DP,统计子树内选了几个黑点。然后向上传的时候加上父亲边的贡献。一个技巧就是如果dp的二维状态的第二维是子树节点个数,那么合并两棵子树的时候直接暴力枚举转移就行了。每两个点只会...原创 2019-10-04 16:03:24 · 236 阅读 · 0 评论 -
BZOJ 2152 / Luogu P2634 [国家集训队]聪聪可可 (点分治/树形DP)
题意一棵树,给定边权,求满足两点之间的路径上权值和为3的倍数的点对数量.分析点分治板题,对每个重心求子树下面的到根的距离模3分别为0,1,2的点的个数就行了.CODE#include<bits/stdc++.h>using namespace std;char cb[1<<15],*cs=cb,*ct=cb;#define getc() (cs==ct&am...原创 2019-03-28 16:36:04 · 139 阅读 · 0 评论 -
BZOJ 4013/Luogu P3240 [HNOI2015] 实验比较 (树形DP)
题目传送门分析放一个dalao博客 传送门,看完再回来看本蒟蒻的口胡吧精髓是合并的方案数的计算,至于为什么是Ci−1j−1\large C_{i-1}^{j-1}Ci−1j−1,是因为当前点必须独立成为第一部分时间复杂度的O(n3)O(n^3)O(n3)也是个玄学东西。其实是因为枚举j,kj,kj,k时上限分别是sz[u]sz[u]sz[u](到目前所有子树的大小)和sz[v]sz[v...原创 2019-03-08 20:40:09 · 161 阅读 · 0 评论 -
BZOJ 3566 概率充电器(树形概率DP)
题面题目传送门分析定义f(i)f(i)f(i)为iii点不被点亮的概率,p(i)p(i)p(i)为iii自己被点亮的概率,p(i,j)p(i,j)p(i,j)表示i−ji-ji−j这条边联通的概率,有f(i)=(1−p(i))∗∏i−j( 1−p(i,j)∗(1−f(j)) )\large f(i)=(1-p(i))*\prod_{i-j}(\ ...原创 2019-03-05 20:24:22 · 199 阅读 · 0 评论 -
树上背包DP Luogu P2014 选课
#include <cstdio>#include <cctype>#include <cstring>#include <algorithm>using namespace std;const int MAXN = 305;int n, m, fa[MAXN], val[MAXN], dp[MAXN][MAXN]; //表示i为根的子...原创 2018-11-05 11:04:31 · 216 阅读 · 0 评论 -
【树型DP】叶子的颜色 OUROJ 1698
题目描述给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根、内部结点和叶子均可)着以黑色或白色。你的着色方案应该保证根结点到每个叶子的简单路径上都至少包含一个有色结点(哪怕是这个叶子本身)。对于每个叶结点u,定义c[u]为从根结点到u的简单路径上最后一个有色结点的颜色。给出每个c[u]的值,设计着色方案,使得着色结点的个数尽量少。 输入【输入...原创 2017-04-13 13:47:43 · 1193 阅读 · 2 评论