树形dp
嘉伟森的猫
NYU Shanghai本科,MBZUAI机器学习硕士,深度学习/强化学习菜鸡
展开
-
hdu 6769 In Search of Gold(二分答案+树形dp)
传送门题意:给一棵n个点的树,每条边的有两个边权和,现将某m条边的长度设为对应的,剩下n-m-1条边的长度设为。问得到的树的直径最小为多少。。题解:二分一个mid,check能否使这棵树的直径不大于mid。每次check时,由于k不大,可以用二维的树形dp来搞,定义表示p为根的子树内让i条边选a且保证子树内最长简单路径不超过mid时,子树内离p最远的点与p的距离最小值(有点绕,通过合理选择a来使这个距离尽量短)。最后如果,就说明当前mid可行。从儿子v往当前点p转移的时候,一开始设为0,每转移一原创 2020-07-24 16:13:21 · 548 阅读 · 2 评论 -
Codeforces 1092F Tree with Maximum Cost(树形dp)
传送门题意:给一棵n个点的无根树,每个点的权值为,每条边长度为1,选一个点使得最大,其中dist(i, v)表示i到v的简单路径的长度(n<=2e5)。题解:把n个点都算一次的复杂度为,所以先默认1为根(选为“v点”),然后考虑换根对答案的影响,从而两次dfs可以算出以每个点为v点的答案,在其中选一个最大的即可。适合中午昏昏欲睡的时候写的题......#include<cstdio>#include<cstring>#include<iostream原创 2020-07-06 14:29:45 · 289 阅读 · 0 评论 -
Codeforces 1324F Maximum White Subtree(树形dp)
传送门题意:给一棵n个点的已黑白染色的图,对于每个点,求出一个包含它的,白点个数与黑点个数差值最大的连通图题解:定义f[p]表示p点的子树(题目中的"subtree"其实是连通图而非子树)内包含p点的白点个数与黑点个数差值最大值。从下往上更新f值,如果S是p的儿子集合,那么定义g[p]表示p点往上能拓展的连通图白点个数与黑点个数差值最大值,定义ans[p]=f[p]+g[p]。从上往下更新g值,如果v是p的儿子,那么相当于用父亲节点的答案减去当前点子树的贡献。#include&原创 2020-06-30 18:29:48 · 222 阅读 · 0 评论