
动态规划 -- 树形DP
Object_S
Java C++
展开
-
[IOI2008]Island
题目地址 思路: 无向基环树森林求直径和。 对于每颗基环树,它对答案的贡献只有可能经过环或不经过,分类讨论即可。 首先处理出每个点往下的最大深度,顺便进行树形DP,再用单调队列获取经过环时的答案即可。 最终树形DP与单调队列的结果取max即可。 (注意内存,数组需要使用技巧二次利用) (该代码内存超限) #pragma GCC diagnostic error "-s...原创 2019-07-07 01:16:35 · 299 阅读 · 0 评论 -
AW286 选课(背包类树形DP)
题目地址 易错点: 分组背包需要反向循环以保证状态转移的正确性. f[x][0]在dp前就初始化了,因此可以不枚举体积为0的情况. 注意初始化. #include<cstdio> #include<iostream> #include<vector> #include<cstring> using namespace std; cons...原创 2019-08-14 14:11:35 · 235 阅读 · 0 评论 -
AW287 积蓄程度
题目地址 易错点: 注意预处理时的边界条件(if(degree[y]==1)D[x]+=e[i].w;else D[x]+=min(D[y],e[i].w);). 笔者由于边数组开了3e5而调试了近半个小时. #include<cstdio> #include<iostream> #include<cstring> using namespace s...原创 2019-08-14 22:30:02 · 169 阅读 · 0 评论