树形DP
文章平均质量分 62
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
BZOJ 3037 创世纪 树形DP
题目大意:给定一张有向图,每个点有且仅有一条出边,要求若一个点x扔下去,至少存在一个保留的点y,y的出边指向x,求最多扔下去多少个点首先原题的意思就是支配关系 我们反向考虑 求最少保留的点 要求一个点若扔出去 则必须存在一个保留的点指向它于是这就是最小支配集 不过由于是有向图 所以一个点要么选择 要么被子节点支配 所以就只剩下2个状态了设f[x]为以x为根的子树选择x的最小支配集 g[原创 2014-10-10 17:17:47 · 2850 阅读 · 1 评论 -
BZOJ 1907 树的路径覆盖 树形DP
题目大意:给定一棵树,求最小路径覆盖数据范围1W,看到还想跑网络流来着= = 不过算了明明树形DP这么水还是不要用网络流这种大杀器为好首先将所有的链都考虑成以链上所有点的LCA为转折点的V字形那么点有两种:转折点和非转折点因此我们选择两种状态进行转移:还会和父亲组成链的状态和成为转折点的状态转移就自己YY算了时间复杂度是线性的#include #include #i原创 2015-02-23 19:55:45 · 1931 阅读 · 4 评论 -
BZOJ 3829 Poi2014 FarmCraft 树形DP+贪心
题目大意:给定一棵树,从1号节点出发对树进行欧拉遍历,每到达一个点这个点就开始装MC,每个点装MC的时间不同,最后回到1号节点装MC,求所有人都能联机的最少时间令f[x]为对第x个节点进行欧拉遍历的时间,g[x]为对第x个节点进行欧拉遍历并完成所有节点的装机的最小时间那么在每个节点以什么顺序遍历每棵子树呢?我们发现装机多出来的时间 即g[x]-f[x]可以用来遍历其它子树 那么显然要从原创 2015-03-04 08:23:14 · 2112 阅读 · 0 评论 -
BZOJ 1123 POI2008 BLO Tarjan+树形DP
题目大意:给定一张无向图,求每个点被封锁之后有多少个有序点对(x,y)(x!=y,1还是看原题面爽。。。Tarjan求点双,然后TreeDP即可时间复杂度O(n+m)#include #include #include #include #include #define M 100100using namespace std;int n,m,cnt;long lon原创 2015-03-25 11:46:24 · 1525 阅读 · 0 评论 -
BZOJ 1131 POI2008 Sta 树形DP
题目大意:给定一棵树,求一个点,使以这个点为根时深度之和最大,在此基础上要求编号最小裸TreeDP。。。#include #include #include #include #define M 1001001using namespace std;struct abcd{ int to,next;}table[M<<1];int head[M],tot;int n,a原创 2015-03-25 09:25:39 · 1717 阅读 · 0 评论 -
BZOJ 4013 HNOI2015 实验比较 树形DP+组合数学
题目大意:给定一张图,每条边有’=’和’<’两个属性,每个点入度最多为1,求这张图可以压成多少个用’=’和’<’连接的序列 我只贴代码~~ 题解自己搜~~#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 110#define MOD 1000000007using n原创 2015-04-29 20:58:04 · 2131 阅读 · 0 评论 -
BZOJ 4027 HEOI2015 兔子与樱花 树形贪心
题目大意:给定一棵有根树,每个点上有一些樱花,现在要求删除一些节点,删除节点的樱花和子节点都会连到父节点上,要求每个节点的樱花数+子节点数不超过mm,求最多删多少个节点这数据范围也只能贪心了吧= = 令fif_i为以节点ii为根的子树中能删除的最多节点(ii节点不删),gig_i为删除最多节点的情况下ii号节点的最小负重 那么首先对于每个节点我们对于所有的子节点为根的子树尽量删,然后考虑如何删除原创 2015-05-05 19:35:03 · 1764 阅读 · 2 评论 -
BZOJ 3004 吊灯 树形DP
题目大意:给定一棵树,要求将这棵树分成nk\frac nk个连通块,每块大小为kk,求所有可行的kk首先kk一定是nn的约数。(废话 然后我们有一个结论:某个kk满足条件当且仅当存在nk\frac nk个节点满足以每个节点为根的子树大小都是kk的倍数 证明: 首先不可能存在超过nk\frac nk个节点满足以每个节点为根的子树大小都是kk的倍数,这是废话 首先证明必要性: 假设我们已经有了原创 2015-05-14 14:40:13 · 1664 阅读 · 0 评论 -
BZOJ 4033 HAOI2015 T1 树形DP
题目大意:给定一棵树,你需要把其中的kk个点染成黑色,使得黑色点两两之间的距离和+白色点两两之间的距离和最大,求最大值 题解戳这里 Orz ydcydc 看来我对于非线性的树形DP还是做得太少了QwQ#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 2020using原创 2015-05-15 13:54:17 · 2568 阅读 · 0 评论 -
BZOJ 2525 Poi2011 Dynamite 二分答案+树形贪心
题目大意:给定一棵树,有一些点是关键点,要求选择不超过mm个点,使得所有关键点到最近的选择的点距离最大值最小 二分答案,问题转化为: 给定一棵树,有一些点是关键点,要求选择最少的点使得每个关键点到选择的点的距离不超过limitlimit 然后我们贪心DFS一遍 对于以一个节点为根的子树,有三种状态:0.这棵子树中存在一个选择的点,这个选择的点的贡献还能继续向上传递 1.这棵子树中存在一个未原创 2015-06-06 16:44:09 · 2046 阅读 · 0 评论 -
BZOJ 4316 小C的独立集 仙人掌DP
题目大意:给定一棵仙人掌,求最大点独立集老办法,每个环新建一个点,连接环上所有点,然后把环上边都拆掉,就变成了一棵树 然后跑树形DP,对于一个点如果是普通节点就正常DP,如果是环上节点参考BZOJ1040#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#d原创 2015-10-30 16:48:10 · 2863 阅读 · 0 评论 -
HDU 5909 Tree Cutting 树形DP+快速沃尔什变换
题目大意:给出一棵树,每个点有一个点权,求对于每个i∈[0,m)i\in[0,m)输出有多少个连通诱导子图的异或和为ii n≤1000n\leq1000,m<210m<2^{10}别问我为什么隔了这么久突然跑回来更blog……我只是在填以前剩下的坑而已。。。 (我花了一整个高三去打游戏,然后花了一整个大一补高三的内容,到了大二,我退学了2333)FWT定义: 对于一个长为n=2kn=2^k的数原创 2016-10-14 16:11:50 · 2937 阅读 · 1 评论 -
BZOJ 2500 幸福的道路 树形DP+单调队列
题目大意:给定一棵树,令a[i]为从第i个节点出发的最长链,求a[i]中最长的区间,满足区间内最大值与最小值之差不超过m读错题害死人,脑残害死人求a[i]显然是树形DP考虑从一个点出发的链可以从子节点走,也可以从父节点走因此我们DP两次,第一次求出从子节点走的最长链,第二次求出从父节点走的最长链,两次取max就是答案但是直接DP会有问题,因为从父节点走的最长链可能是从自己的子树原创 2015-02-26 16:35:18 · 1760 阅读 · 1 评论 -
BZOJ 2314 士兵的放置(play) 树形DP
题目大意:给定一棵树,求最小支配集以及最小支配集数量首先我们需要会求最小支配集- -其实支配集的求法很优雅的= = 那些第一问就写了一大坨的第二问还怎么写- -可以自己YY一下简单的支配集求法= = 实在不懂看代码吧我懒得解释了= =然后第二问就直接把方案数顺便统计下就行了大半夜胡乱写了发居然也过了= =#include #include #in原创 2015-02-20 00:19:16 · 2316 阅读 · 0 评论 -
BZOJ 2152 聪聪可可 树的点分治/树形DP
题目大意:给定一棵树,每条边上有边权,求距离为3的倍数的有序点对树的点分治,对于每个重心统计出每棵子树距离重心长度为0/1/2的点的数量,计算出ans即可最后ans*2+1 和n^2进行一下约分即可其实我上当了……这题根本就没必要写树的点分治,直接树形DP就出来了开一个三元组记录某棵子树中距离子树的根节点距离为某值的点的个数然后直接统计+转移就行了树的点分治:原创 2014-10-27 10:11:50 · 3353 阅读 · 0 评论 -
BZOJ 1040 ZJOI2008 骑士 树形DP
题目大意:给定一个基环树林,每个点上有权值,要求选择一个权值和最大的点集,要求点集中的任意两个点之间不能直接相连最大点独立集……考虑到n对于每棵基环树,我们找到环上的一条边,设边上的两端点分别为u和v,f[i]为以i为根的子树在取i点的情况下的最大权值,g[i]为不取,于是我们有以下做法:1.断掉这条边2.u不取,v任意,我们以u为根跑一遍树形DP,取g[u]3.v不取,u任意原创 2014-10-03 01:29:59 · 4030 阅读 · 3 评论 -
BZOJ 2097 Exercise 奶牛健美操 二分答案+树形DP+贪心
题目大意:给定一棵树,可以删掉k条边,求删掉后森林中所有树直径的最大值的最小值最大值最小,典型的二分答案此题我们二分树的直径,每次二分DFS一次,对于每个节点统计出所有子树删边后的dis,排序,贪心删掉最大的,直到最大的两个子树相加不会超过二分的答案为止时间复杂度O(nlog^2n)老子的二分居然写挂了。。。桑不起啊啊啊啊#include#include#include#原创 2014-10-13 20:37:18 · 1749 阅读 · 0 评论 -
BZOJ 1131 POI2008 Sta 树形DP
题目大意:给定一个n个点的无根树,要求找到一个根节点,使深度之和最大令f[x]为以x为根的子树的深度之和首先我们找到任意一个节点进行深搜,统计出每棵子树的大小,以及所有点的深度之和然后再以该节点为根深搜一遍,此时状态从父节点转移至子节点,转移方程如下:当我们将根节点从4节点变为5节点时,橙色部分每个点的深度+1,绿色部分每个点的深度-1故得到状态转移方程:f[x]=原创 2014-10-13 09:08:29 · 1343 阅读 · 0 评论 -
BZOJ 3727 PA2014 Final Zadanie 树形DP
题目大意:给定一棵树,令一个点到所有点的距离与点权的乘积之和为b[i],求每个点的权值a[i]首先如果给定a[i]我们可以很轻松的求出b[i] 但是反过来怎么搞?高斯消元?30W?考虑已知a[i]求b[i]的情况 令这棵树的根为1 点i到根节点的距离为dis[i] 以i为根的子树的a值之和为size[i] 那么有递推式b[1]=Σa[i]*dis[i]b[x]=b[fa[x]]-2原创 2014-11-18 15:47:18 · 2183 阅读 · 0 评论 -
BZOJ 3611 HEOI2014 大工程 倍增LCA+单调栈+树形DP
题目大意:给定一棵树,m次询问,每次给出k个关键点,询问这k个点之间的两两距离和、最小距离和最大距离n处理方法同2286 消耗战 地址见 http://blog.csdn.net/popoqqq/article/details/42493725这个题的DP有些麻烦 因此我把要处理的节点单独拎出来做的DP 具体状态和转移见代码#include #includ原创 2015-01-07 17:48:09 · 2710 阅读 · 0 评论 -
BZOJ 3162 独钓寒江雪 树同构+树形DP
题目大意:给定一棵树,求本质不同的独立集个数对1000000007取模后的值首先独立集个数应该都会求吧- -令f[x][0]为x这个点不选的独立集个数f[x][1]为x这个点选的独立集个数那么有f[x][0]=Σf[son[x]][0]+f[son[x]][1]f[x][1]=Σf[son[x]][0]但是现在要求本质不同说到本质不同我们很容易想到群论原创 2015-01-27 19:55:36 · 2163 阅读 · 0 评论 -
BZOJ 1023 SHOI2008 cactus仙人掌图 仙人掌DP
题目大意:给定一棵仙人掌,求这棵仙人掌的直径首先Tarjan缩点双,开vector或者链表记录每个点属于哪些点双,以及每个点双中有哪些点有些点双可能不是环,我们可以补上一条边看成环,无伤大雅每次DP时,首先枚举环的根节点以外的点,对这些点所在的其它点双DP一遍然后令f[x]为以x为根的子仙人掌的所有点和x之间的最大距离然后我们将环倍增 用单调队列来更新答案 保证决策点和被更新点原创 2015-01-10 16:11:49 · 1692 阅读 · 0 评论 -
BZOJ 2657 ZJOI2012 旅游(journey) 树形DP
题目大意:给定一个三角剖分之后的凸多边形,求连接凸多边形的两个顶点的线段能经过的最多的三角形数首先结论1:将相邻的三角形连边 得到的一定是一棵树证明:如果此图出现环 那么一定有一群三角形围成一圈 那么就会在这些三角形的中间出现一些顶点 这显然是不可能的结论2:连接两个三角形的线段经过的三角形等同于树上两个三角形路径上的所有点证明:不会 自己画个图YY吧总之就是相邻的三角形连边原创 2014-12-09 12:47:32 · 2023 阅读 · 0 评论 -
BZOJ 3566 SHOI2014 概率充电器 树形期望DP
题目大意:给定一棵树,每个点初始有一个概率为1,为1的节点会沿着边以边权上的概率向四周扩散,求最终期望有多少个点是1OTZ 不想写题解了贴个代码吧= =如果有不明白做法的直接问我就好了= =#include #include #include #include #define M 500500#define EPS 1e-7using namespace std;stru原创 2015-02-02 11:49:40 · 1374 阅读 · 0 评论 -
BZOJ 1060 ZJOI2007 时态同步 树形DP
题目大意:给定一棵有根树,每次操作可以使某条边边权+1,求最少的操作次数,使根节点到每一个叶节点的距离都相等树形DP容易发现操作对于越靠近根节点的边进行越有利首先对于每个节点扫一遍记录这个节点到子树中所有叶节点的最大距离 然后枚举每一个儿子 将该节点和该儿子之间的边权补至最大距离相等对于每个节点都如此做 最后就能保证根节点到每个叶节点的距离都相等数据有误坑死人……#incl原创 2014-12-09 13:27:23 · 1554 阅读 · 0 评论 -
BZOJ 4726 POI2017 Sabota? 树形DP
题目大意:给出一棵nn个点的有根树,初始某个点是叛徒,接下来如果某一时刻某个节点的子树除自己以外的节点中,叛徒的比例超过了xx,那么这一整棵子树都会变成叛徒,求xx的最小值使得最坏情况下叛徒数量不会超过kk。老年选手复健中……结论1.最坏情况下初始叛徒一定是一个叶节点 证明:显然如果初始叛徒不能策反它的父亲那它就不能策反任何节点了 假设初始叛徒为pp,pp有一个儿子qq,pp能够策反它的父亲fa原创 2016-12-09 00:22:04 · 1377 阅读 · 2 评论