随笔分类 - DP(树形/仙人掌)
摘要:树hash啊 我的做法很垃圾,就是yy一种只有一个孩子时hash值和孩子一样的hash法 然后用重心去作为根遍历 这样有点问题,就是重心假如也是要删掉的那就gg了 那我们求tot的时候删掉的点就不管直接设为0,求重心的时候也不管这些删掉的点就可以了 其实 先把新的树建出来不好吗
阅读全文
摘要:一个悲伤的故事。。。 今天%你赛的t1全场都做过原题。。。 蒟蒻瑟瑟发抖 n^2的DP还是能够想到的 我写不下去了你还是再%一次吧
阅读全文
摘要:ORZ 下次做再写吧 注意hash的base不用太大不然容易挂
阅读全文
摘要:终于有道我会的了。。。 int f[2][maxn],g[2][maxn],tot[maxn];//构造叶子编号时希望最大/小result 先手取子树最小/大的编号的排名 tot是子树中叶子个数 如果希望最大,可以理解为叶子的编号是为了先手取最大时构造,而且要故意去卡取最小 f[0][x]=(∑f[
阅读全文
摘要:首先先来画一下这个柿子 as(i)=sigema(1~n)j dis(i,j)^k =sigema(1^n)j sigema(1~k)d S(k,d)*d!*C(dis(i,j),d) =sigema(1~k)d S(k,d)*d! *sigema(1^n)j C(dis(i,j),d) 需要用脑子
阅读全文
摘要:这个范围明显树包的 然而值并不滋磁 想了一会发现可以带一维当前子树用了多少边,搞定当前向上还能送多少 然后发现会有搞不定的情况,要向上传负数 每次都要重新初始化,负数强制要要
阅读全文
摘要:这道题的难点其实是在设DP方程,见过就应该会了 令f0,i表示先激发i的父亲,再激发i,把i的整棵子树都激发的最小费用 f1,i表示先激发i,再激发i的父亲,把i的整棵子树都激发的最小费用 设x,y为i的孩子,先激发x再激发i再激发y有 f0,i=∑(f1,y-cy)+∑f0,x+di-cfa f1
阅读全文
摘要:请不要去改题目给的输入,不然你会wa穿。。。 这么故弄玄虚的题目,肯定要先转换问题 看到这个不断的除2想起别人家的线段树的写法。。。x的两个孩子是x<<1和x<<1|1 然后问题就转换成给你一棵树,你可以增加树的权值,要让树上每一条长度为k+1的链上的点权和%m都等于0 先%m把取值范围降到[0,m
阅读全文
摘要:首先先套路上虚树 对于虚树,分成两类点:一种是作为议事处的,一种是虚树加的lca 如果树上没有加的点,对于两个议事处之间的路径,一半归下面,一半归上面,这个就很好解决了 对于lca,我们需要找到在树上离它最近的议事处,此时lca相当于帮这个议事处去和其他的点分配路径上的点 这个我们用二次扫描+换根法
阅读全文
摘要:一定要记得开LL啊啊啊啊啊啊啊啊啊啊啊 被琛爷d飞了 我只会强行上树包TLE得飞起(f[i][zt]表示当前子树匹配图上的那些点) 但是zt我们可以换成和根匹配的是那些点,然后加一个容斥,枚举子集,树上两点可以选图中同一个点 注意不能树和图同步dfs,这个复杂度是假的。。。 要在dfs里面枚举当前点
阅读全文
摘要:道理我都懂,但是这个DP难度真的很大 先tarjan一下判断是不是仙人掌 对于环上的点,它们是不能相连的,直接拆了完事 然后我们成功的把仙人掌转成了树,就是一个treeDP 问题转化成在一棵树上,可以选择两个点将其树上路径覆盖,求不相交的覆盖方案数 令f[x]表示x子树中的方案数,它没有一条单向向上
阅读全文
摘要:这个题意花里胡哨的zzzzz 其实它是个树啊。。。然后看一下范围很显然是一个树背包啦 设f[i][j]表示以i为根的子树分成j段 对于当前两个子树合并,可以合出max(j1,j2)~j1+j2范围的段数 难点就在于怎么计算方案了(是真的没有想到啊T_T) 方程是这样的:singema f[x][i]
阅读全文
摘要:二次扫描+换根 有点困思路不清晰啊
阅读全文
摘要:首先我们先挖掘一下性质 对于一条非树边,假如他的两个节点的树上距离为奇数,那就必须删掉 处理完这个以后,再考虑一下两条非树边的各自的两个节点的树上路径相交的情况 假如相交为奇(偶)数条边,那么没相交的那两段分别就会有偶(奇)数条边,偶(奇)+偶(奇)+两条非树边,可以构成偶环 所以最后删剩下的会是一
阅读全文
摘要:太假了居然过了样例就A了 这个做法应该是一个O(n^4)的,相信大家都看出来了 这是一个树背包的问题,相信大家也都看出来了 然而怎么背包是个问题QWQ,因为选择了一个点建伐木场,就会影响父亲节点的决策 我只会O(n^2kmaxW)(相当于O(n^5))假设到了当前点有多少木头没有被运到伐木场....
阅读全文
摘要:树背包 设f[i][j]表示第i个点,和子节点组成的联通块大小为j,其他都可行的方案 j=0表示可行的总方案
阅读全文
摘要:曾系尴尬今天发现自己没写这题 不建新边的话其实每条边都是走两次 假如建一条新边相当于一条树上路径只用走一次 那么当然选直径了 但是建两条的话有可能树上路径有重叠部分,而每条边都需要经过,那么就会多减两次 所以第一次选完以后把直径上的边变负容斥下 恶心的是树上边权有负的时候是不能用两次dfs的方法找直
阅读全文
摘要:完结撒花!!!!!!!!!!! 最后一题填坑1A仙人掌WWWWWWW我真流弊 首先把环拆开,环中每一个点连向环的根,然后搞LCA,答案就是套路的d[x]+d[y]-d[lca]*2 然后就可以发现,其实只有当fx和fy在同一个环里面,才有可能通过不同的路线导致答案更小,特判之即可。
阅读全文
摘要:第一问应该没人不会吧。 然后第二问,可以意识(证明也可以)到这些边一定是连续的,我一开始的想法是枚举区间,但是这个是平方级别的不兹瓷 对于一段区间假如它左右端点查找除直径外最大值的和加上区间的值等于直径,而我对于这个的想法是,这一段的边可能成为答案,但是我没有很好的意识到(lj做题全凭感觉),非这段
阅读全文
摘要:本来今天想学基环树的 认真看一看,这不就是弱化的仙人掌嘛 然后,就直接仙人掌上DP咯(蒟蒻不是很会调了一晚上。。。)
阅读全文