随笔分类 - H-动态规划-树形DP
摘要:Link: Codeforces #514 传送门 很简单的一场比赛打崩了也是菜得令人无话可说…… D: 一眼二分,发现对于固定的半径和点,能包含该点的圆的圆心一定在一个区间内,求出区间判断即可 此题一个重要性质就是圆与$x$轴相切,画出圆心所在直线后就能想到上述贪心了 #include <bits
阅读全文
摘要:Link: P1273 传送门 Solution: 比较裸的树形$dp$ 令$dp[i][j]$表示以$i$为根的子树中选$j$个叶子的最小代价 最后找到使得$dp[1][k]\ge 0$的最大$k$即可 Code:
阅读全文
摘要:Link: BZOJ 2427 传送门 Solution: 只看样例的话会以为是裸的树形$dp$…… 但实际上题目并没有说明恰好仅有一个物品没有依赖项 因此原图可能由是由多棵树与多个图组成的 先跑一遍$tarjan$求出每个图中的$SCC$,缩点将原图转化为森林 再设置一个根,将森林转换成一棵树$d
阅读全文
摘要:Link: AGC004 传送门 A: …… #include <bits/stdc++.h> using namespace std; long long a,b,c; int main() { scanf("%lld%lld%lld",&a,&b,&c); if(a%2==0||b%2==0||
阅读全文
摘要:Link: BZOJ 2111 传送门 Solution: 小根堆的模型还是很容易能看出来的 利用树形$dp$统计方案数:$dp[i]=dp[lc]*dp[rc]*C[sz[i]-1][sz[lc]]$ (小根堆的个数只受序列中数的大小关系影响,与其差值无关,因此每一个组合产生相同的个数) 其中组合
阅读全文
摘要:Link: BZOJ 1060 传送门 Solution: 直接上树形$dp$统计当前节点到叶子的最长距离 在返回前统计答案,这样就保证每棵子树已经平衡,相当于只调整$w(i,son[i])$ 可以发现每条边对答案的贡献为$dp[i]-dp[son[i]]-w(i,son[i])$ Code:
阅读全文
摘要:Link: BZOJ 1040 传送门 Solution: 基环树$dp$ 如果仅仅是一棵树,直接树形$dp$即可,维护选与不选两种状态下的方案数 但此题是一个基环树,即除了一个环外是一个树形结构 对于环,一般都是将环转化为链处理 我们只需要删掉环上的任意一条边即可将环转化为树,那我们只需要人为判断
阅读全文
摘要:Link: BZOJ 4060 传送门 Solution: 可以发现字符串间的关系可以构成一棵树 于是我们先用字符串哈希建树,再树形$dp$即可 设$dp[i][j]$为第$i$个节点从$P$字符串的第$j$为开始匹配的失配位置, 则有$dp[i][j]=dp[ch[i][1]][dp[ch[i][
阅读全文
摘要:Link: POJ1935 传送门 Solution: 一道吓唬人的水题 注意这是一棵树,两点间仅有唯一的路径! 于是每个“关键点”和起点只有一条路径,想去起点另一棵子树上的节点必须要回到起点 如果必须要回到起点,答案$res$就是除去无用边后整棵树总距离$*2$, 因为不必回到起点,最终结果为$r
阅读全文
摘要:Link: BZOJ 4033 传送门 Solution: 此题用到了计算贡献的方法, 将 多条路径的路径和 $->$ $\sum_{i=1}^{n-1} w[i]*cnt[i]$ 这样我们由找出所有路径再计算转化成了对每条边计算其的贡献 由于所有节点只用2种选择,接下来就是比较套路的树形DP了 设
阅读全文
摘要:Link: BZOJ 3573 传送门 Solution: 一道语文题 转化后的题意就是使得每个节点的权值都等于 父亲节点的权值/儿子数 的最小操作数 能发现一条重要的性质:只要一个节点确定,所有节点的权值都确定了 于是我们只要枚举$1……n$每个节点权值不变, 算出根节点$root$的权值出现过的
阅读全文
摘要:Brief Intro: 一棵树,删去若干条边,最大化得到的所有连通块大小的乘积 Algorithm: 这其实算是一类题型吧,虽然这是我做的第一题 树形DP,维护关于子树根节点的信息 此处用dp[i][s],表示以i为根的子树,且i所属连通块的大小为s时的最大值 转移时还是树形DP的常规套路,用类似
阅读全文

浙公网安备 33010602011771号