
树上问题
Lazer2001
天涯何处无芳草
只是白兔寻不到
展开
-
POJ-1665 求树的重心 dfs
大家都很强,可与之共勉。树的重心,就是取一个点,使得以这个点为根节点的max(子树的总结点数)最小。顾名思义,这就是一个树上的DP问题。在点分治里也要常常用到。#include "cctype" #include "cstdio" #include "cstring"#define max(a, b) ((a) > (b) ? (a) : (b))template<typename T> inli原创 2017-03-20 13:03:14 · 575 阅读 · 0 评论 -
POJ-1741 TREE 点分治 树上问题
大家都很强,可与之共勉函数对应关系写错, 调了两个小时, FUKK。 大致思路:点分支。 找以每一个节点(其实不是每一个)为根节点的重心, 用dis[ ]表示经过重心的每一条链的长度。但是计算的时候会计算到以重心为根节点的子树中的dis[ ],所以对于与重心子树中的每一个节点v,都应该去重新计算它的路径长度到重心的路径长度,然后用ans减去这里面的合法方案数。因为是分治,分而治之。所以计算完一个原创 2017-03-20 22:23:30 · 401 阅读 · 0 评论 -
codevs1380 没有上司的舞会 树上dp
大家都很强,可与之共勉。一道非常弱的树上DP,状态f[i][0]表示i没到,f[i][1]表示i到了。 转移方程显而易见。#include "cctype" #include "cstdio" #define max(a, b) ((a) > (b) ? (a) : (b)) #define atoi(x) x - 48 template<typename T> inline bool re原创 2017-03-20 13:07:33 · 362 阅读 · 0 评论 -
T解 BZOJ-4033 树形DP HAOI2015 T1
大家都很强, 可与之共勉。题面: 有一棵点数为 N 的树,树边有边权。给你一个在 0~ N 之内的正整 数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的 N-K个点染成白色 。 将所有点染色后,你会获得黑点两两之间的距 离加上白点两两之间的距离的和的受益。问受益最大值是多少。其实就是: 有一棵N个点的边代权树,每个点都是白点,然后你要选择K个点将其染黑 一棵树的价值是白点原创 2017-03-23 16:24:52 · 594 阅读 · 0 评论