树形DP
romiqi_new
这个作者很懒,什么都没留下…
展开
-
191024省选测试题解
T1:有n个不相交矩形障碍,求从原点走到某个目标点的最短路,目标点在x轴上显然矩形的右端点是没用的,我们保留左边即可显然不会往左走,dp一下是n2n^2n2的,用扫描线优化一下即可#include<bits/stdc++.h>#define pb push_back#define ll long long using namespace std;inline int re...原创 2019-10-24 16:29:35 · 188 阅读 · 0 评论 -
[LOJ2339][虚树][边分治][树形DP]WC2018:通道
LOJ233944pts暴力就不用讲了两棵树的做法似乎是个套路?先拆距离变成dep1[x]+dep1[y]−2∗dep1[lca1(x,y)]+dis2(x,y)dep1[x]+dep1[y]-2*dep1[lca1(x,y)]+dis2(x,y)dep1[x]+dep1[y]−2∗dep1[lca1(x,y)]+dis2(x,y),然后就可以在第一棵树上从下到上枚举lca,消去lca的影响,...原创 2019-10-21 17:56:01 · 173 阅读 · 0 评论 -
191007CSP-S模拟题解
博主来口胡联赛组巨佬们的考试题辣T1:给一个序列,保证只有两个数出现了奇数次,求出这两个数数据范围只允许O(n)O(n)O(n)显然考虑出现奇数次的数字和出现偶数次的有什么不同,当然是全部异或起来后出现偶数次的全没了所以先全部异或起来得到两个所求数的异或值,这个异或值某一位为1表示某个数这一位为1而另一个数这一位为0,那就把这一位为1的数再全部异或一遍就完了Code:太傻逼不想写T2:...原创 2019-10-11 20:13:46 · 392 阅读 · 0 评论 -
[BZOJ4890][树形DP]TJOI2017:城市
BZOJ4890看到题还以为要二分,结果连二分都不用枚举断边,计算两个子树直径,更新答案,没了Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') ...原创 2019-09-16 23:51:48 · 115 阅读 · 0 评论 -
[BZOJ4013][树形DP][组合数学]HNOI2015:试验比较
BZOJ4013实际上是给出一个森林,等号的条件用并查集缩起来,把每个森林的根连向0号节点就是一棵树,要给出一个序列使得父亲严格在儿子前面,考虑树形DP,f[i][j]f[i][j]f[i][j]表示子树iii中的排列有恰好jjj个小于号的方案数,每次加入一个v的一个子树y形成一个恰好kkk个小于号的排列的转移就是tmp[k]=∑i=1siz[v]∑j=1siz[y]f[v][i]∗f[y][...原创 2019-09-05 18:47:54 · 118 阅读 · 0 评论 -
[BZOJ3573][树形DP]HNOI2014:米特运输
BZOJ3573是个鬼的树形DP(鬼:你说啥? )题面又臭又长,简要题意:用最少的改变权值的次数使得一棵有根树的每个节点的所有儿子权值相同,且它本身的权值为所有儿子的权值和(叶子节点除外)(权值可以是小数)如果确定了一个点的权值,那么所有点的权值就都定下来了则可以dfs求出保持某个节点不变的情况下根节点的权值那么如果存在两个点,在分别保持它们各自不变的情况下,根节点的权值一样,那就意味着...原创 2019-08-21 16:52:54 · 105 阅读 · 0 评论 -
[树形DP]SCOI2019:RGB
传送门一个容斥的做法,对于树上连通块问题,转化为点的贡献之和减去边的贡献之和所以这题就简单了,统计所有绿点的贡献和边的两端都是绿点的边的贡献Code:#include<bits/stdc++.h>#define ll long long#define mod 1000000007using namespace std;inline int read(){ int re...原创 2019-08-05 13:36:12 · 241 阅读 · 0 评论 -
[校内模拟][树形DP][组合数学][NTT]战略游戏
Link就是要求定下两个点,并从这两个点往外延伸k个互不相交的分支的方案数首先求出从某个点出发向子树内部延伸i个分支的方案数对于一个点的一个儿子,这个儿子的子树中每一个点都可能成为一条分支的终点,这个儿子内就有siz个终点不同儿子的子树互不影响,所以根据乘法原理,可以构造点v的生成函数:F(x)=∏(1+sizson[v])F(x)=\prod{(1+siz_{son[v]})}F(x)=...原创 2019-07-27 10:03:23 · 144 阅读 · 0 评论 -
[BZOJ4871][树形DP]SHOI2017:摧毁“树状图”
BZOJ4871题外话:这是魔禁里的那个树状图么题内话:建议大家找个有图的题解很容易看出来是树形DP,设计状态:f[x][0]f[x][0]f[x][0]:穿过x向上的半条链f[x][1]f[x][1]f[x][1]:不穿过x且完全在子树内的一条链f[x][2]f[x][2]f[x][2]:穿过x且完全在子树内的一条链f[x][3]f[x][3]f[x][3]:穿过x向上的半条链以及...原创 2019-04-02 21:30:45 · 231 阅读 · 0 评论 -
[BZOJ4011][树形DP]HNOI2015:落忆枫音
BZOJ4011题意:给个DAG和一条额外的边,求以1为根的有向生成树个数分析:如果没有额外的边,那么考虑乘法原理得到答案就是∏i=2nin[i]\prod_{i=2}^n{in[i]}∏i=2nin[i]加上额外的边后,可能生成环(如果没有就一样的)多出来的选择就是环上的点都选了环上的父亲那么我们设f[x]f[x]f[x]是xxx到sss(给出的额外边)上产生的贡献,转移就是f[x...原创 2019-04-02 21:23:24 · 114 阅读 · 0 评论 -
[BZOJ5212][LCT][树形DP][树链剖分]ZJOI2018:历史
BZOJ5212去年ZJOIDay1最可做的题吧和SDOI2017树点涂色类似,但是难在修改和查询方式最大值首先我们简化问题:给出树上每个点被access的次数,求最大的虚实边切换次数之和一个点会被其子树和它自己影响,所以有一个比较普遍的结论,一个点的切换次数如果是它兄弟里面最大的,且小于总和的一半,那就轮流切换,否则总会有一些切换是无用的所以就可以DP出一次的答案考虑修改,修改会影响...原创 2019-05-08 12:17:01 · 191 阅读 · 0 评论 -
[LOJ2324][树形DP]清华集训2017:小 Y 和二叉树
LOJ2324题外话:为啥这个小和Y中间有个空格,每次在前缀查询的网站都搜不出来首先,一个度数=3的点不可能成为叶子节点最左边的叶子节点就是这棵树的中序遍历的第一位,所以我们可以DP确定这个叶子节点是多少,设f[i]f[i]f[i]表示iii点的子树中中序遍历的第一位最小可能是多少然后确定了最终中序遍历的第一位之后,可以通过这个点向上扩展具体的,如果这个点只有一个子树,判断一下这个点和子...原创 2019-04-05 09:13:39 · 246 阅读 · 0 评论 -
[BZOJ4033][树形DP]HAOI2015:树上染色
BZOJ4033这道题最关键的思想在于,我们以往树形DP的时候,常常设f[i][j]f[i][j]f[i][j]表示点iii的子树的dpdpdp值,而这道题对于一个点的子树,它的贡献是子树内所有黑点到子树的根节点的距离之和乘上其兄弟的子树的黑点个数,白点同理,因为只能染k个,所以必须记录染了几个黑点,这样的状态是O(n3)O(n^3)O(n3)的所以我们需要换一种统计贡献的方法,既然点不好统计...原创 2019-04-05 09:04:22 · 178 阅读 · 0 评论 -
[BZOJ1017][树形DP][背包DP]JSOI2008:魔兽地图DotR
BZOJ1017每个装备可以直接贡献,也可以用于合成设f[i][j][k]f[i][j][k]f[i][j][k]表示第iii件装备,jjj件用于合成,花费kkk元可以获得的最大力量值首先处理出每个高级物品能够购买的上限lim[i]lim[i]lim[i]和价格mon[i]mon[i]mon[i]枚举每个物品购买的数量lllfff数组不好直接转移,设g[i][j]g[i][j]g[i][...原创 2019-04-05 08:54:21 · 167 阅读 · 0 评论 -
[LOJ2330][树形DP]清华集训2017:榕树之心
LOJ2330分析:假设现在心在位置xxx,则心可以通过xxx的不同子树的生长抵消移动,仍然停留在xxx位置当然也有无法停留在xxx位置的情况:第一种是siz[x]−1siz[x]-1siz[x]−1为奇数,显然多出一次生长第二种是sizsizsiz最大的子树的sizsizsiz过于大(大于1/2),所以一定会把心拉到里面去那么我们就可以树形DP判断根节点是否可行了,设w[i]w[i]w...原创 2019-04-04 21:57:09 · 183 阅读 · 0 评论