随笔分类 - 树形dp
摘要:题目链接 D: 看样例+分析得知,假设现在要选$i$个,那么能达到的最大的值就是$sum_=\sum^$, 最小值就是$sum=\sum^$,那么每次可选择的数量就是$sum_1-sum_2+1$,那么答案就为$\sum^{n+1}({sum_-sum_ + 1})$ #include<bits/s
阅读全文
摘要:题目链接 题解:经典的树形DP,跑两遍即可,第一遍记录出每个点为根时向下所能构成的最大的值(cnt_-cnt_),第二遍统计出每个点为根时的答案,此时的根包括其父,所以在第二次dfs时要减去再回溯 #include<bits/stdc++.h> using namespace std; #defin
阅读全文
摘要:"题目链接" 题意:给你一棵树,让你求每个点之间的距离的最短之和 题解:看到最短之和,想到最小生成树,且每条边权不同,最小生成树唯一,就转换问题为,求一棵树上每个点到所有点的距离之和,这就是树形dp,先对一个点跑dfs,求出该点到所有点的距离之和,统计每个点的子树个数,并假设该点为根,再跑一次dfs
阅读全文
摘要:"题目链接" 依旧是树形dp啦,一样的找根节点然后自下而上更新即可 设$dp_{i,0}$表示第i个不设,$dp_{i,1}$表示第i个设一个,容易得到其状态转移 $dp_{i,0} = \sum{dp_{j,1}}(j为i的儿子节点)$ $dp_{i,1} = 1 + \sum{min(dp_{j
阅读全文
摘要:"题目链接" 经典的树形dp,最大独立集,对于每个点就有2个状态,选/不选 设$dp_{i,0}$表示不选第i个,$dp_{i,1}$表示选第i个,容易得到其状态转移 $dp_{i,0} = \sum{max(dp_{j,0}, dp_{j,1})}(j为i的儿子节点)$ $dp_{i,1} = r
阅读全文

浙公网安备 33010602011771号