博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

随笔分类 -  动态规划——树形DP

摘要:给定一棵边带权的树。求删掉K条边、再连上K条权为0的边后,新树的最大直径。 阅读全文
posted @ 2018-06-11 10:20 SovietPower 阅读(308) 评论(0) 推荐(0)
摘要:一道很恶心的题→_→ 阅读全文
posted @ 2018-06-07 19:38 SovietPower 阅读(348) 评论(4) 推荐(0)
摘要:"题目链接" 要求的和、最大值、最小值好像都可以通过O(n)的树形DP做,总询问点数 include include include // define gc() getchar() define MAXIN 1000000 define gc() (SS==TT&&(TT=(SS=IN)+frea 阅读全文
posted @ 2018-06-06 15:25 SovietPower 阅读(208) 评论(0) 推荐(0)
摘要:"题目链接 BZOJ" "洛谷P2495" 树形DP,对于每棵子树要么逐个删除其中要删除的边,要么直接断连向父节点的边。 如果当前点需要删除,那么直接断不需要再管子树。 复杂度O(m n)。 对于两个要删除的点 u,v 之间的链,若链上没有其它需要删的点,则只需保留链上的最小边权即可。 把有用的点按 阅读全文
posted @ 2018-06-05 21:38 SovietPower 阅读(379) 评论(0) 推荐(1)
摘要:求一棵仙人掌的最大独立集。 阅读全文
posted @ 2018-06-01 08:58 SovietPower 阅读(260) 评论(0) 推荐(2)
摘要:题目链接 洛谷 题意:给定仙人掌图,边权为1,求其直径。 类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链、次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案。(不需要存次长链,求解过程中先更新ans,然后再更新最长链即可) 设f[i] 阅读全文
posted @ 2018-05-01 15:28 SovietPower 阅读(216) 评论(0) 推荐(0)
摘要:"题目链接" 树形DP,考虑子节点对父节点的贡献。 设f[x][i][j]表示当前为x,用i个x去合成上一层装备,花费为j的最大价值。 由子节点转移时 是一个分组背包,需要一个辅助数组g[i][j]表示前i棵子树花费为j能贡献给x的最大价值。 那么 $g[i][j] = max{g[i 1][j k 阅读全文
posted @ 2018-04-27 15:16 SovietPower 阅读(180) 评论(0) 推荐(1)
摘要:"题目链接" 不难看出矛盾关系可以构成一棵树,如果取一个节点,那么它的父节点就不能取,树形DP就行了。 这不是没有上司的舞会吗。。 但是漏了一种情况,即这个关系可能形成一个环(从n条边和样例能看出来),且有多个连通块,每个连通块一定且仅在根节点处有一个环。 在环上选择一条边断开,把端点分别作为根节点 阅读全文
posted @ 2018-04-02 08:15 SovietPower 阅读(201) 评论(0) 推荐(0)
摘要:"题目链接" 状态只与黑、白两点的颜色有关,于是用 $f[x][i][j]$表示当前以x为根节点,有$i$个黑点$j$个白点,使得x子树满足该条件的最小花费。 最后答案就是 $min\{f[root][0][j],f[root][i][0/1]\}$。 把 $i\geq 1$的状态都看做 $i=1$ 阅读全文
posted @ 2018-03-31 16:52 SovietPower 阅读(374) 评论(0) 推荐(2)