树形DP
LowestJN
强省弱OIer
展开
-
[BZOJ3238][Ahoi2013][后缀自动机][树形DP]差异
题意∑len(Ti)+∑len(Tj)\sum len(Ti)+\sum len(Tj)可以O(1)O(1)计算出来。 主要就是求lcp(Ti,Tj)lcp(Ti,Tj) 将字符串反过来,建立后缀自动机,parent树就是原串的后缀树,lcp就是对应节点的lca,树形DP。 这幅图来自一篇不错的后缀自动机讲解#include <cstdio>#include <iostream>#incl原创 2017-01-31 11:13:29 · 1101 阅读 · 0 评论 -
[BZOJ1023][SHOI2008][仙人掌直径][队列优化DP]cactus仙人掌图
求仙人掌直径裸题 看这篇题解吧 http://z55250825.blog.163.com/blog/static/150230809201412793151890/#include <cstdio>#include <iostream>#include <algorithm>#define N 100010using namespace std;int n,m,u,v,k,cnt,Ans原创 2017-03-04 10:33:16 · 594 阅读 · 0 评论 -
[ BZOJ3572 ] [ Hnoi2014 ] [ 虚树 ] [ 树形DP ] 世界树
学一发虚树 这个树形DP是真的烦,都调发烧了……我说真的#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N=300010;int n,cnt,x,y,tms;int G[N],dfn[N],size[N];struct edge{ int t,nx;}E[N<<1原创 2017-06-13 20:20:45 · 494 阅读 · 0 评论 -
[二分 树形DP] CEOI2017. Mousetrap
第一次做这种DP题以 tt 为根,那么老鼠的决策肯定是先往上走一段(或不走),再往子树中走。如果老鼠往子树中走,我们肯定是等它走到某个位置不能走了,然后把他当前在的位置当根节点这段路上的其他支路都封死,这样是最优的。那么我们可以树形DP出老鼠走到以这个点为根的子树的时候,需要的最少步数。令 wiw_i 表示走到这个节点为根的子树时候的最小步数( wiw_i 要算上从这个点到根路径上的支路的数量)那么原创 2017-10-06 18:10:31 · 766 阅读 · 0 评论 -
[树形DP] Codeforces 856D. Masha and Cactus
令 fif_i 表示子树 ii 中加边的方案,gi=∑j∈sonifjg_i=\sum_{j\in son_i}f_j若当前考虑的点为 uu ,第一种方案是不加边,那么 fu=guf_{u}=g_u如果要加边,那么加的边的两个端点的lca肯定是 uu 如果加一条 x,yx,y 的边,那么造成的贡献是 ∑i∈path(x,y)∑j∈soni⋀j∉path(x,y)fj\sum_{i\in path(x原创 2017-10-18 15:43:24 · 524 阅读 · 0 评论 -
[树形DP] CEOI 2017 Practice. Museum
首先把 xx 这个点作为根 令 fi,jf_{i,j} 表示在子树 ii 中,以 ii 为起点,进过 j−1j-1 个点并且回到 ii 时的最小代价gi,jg_{i,j} 在子树 ii 中,以 ii 为起点,进过 j−1j-1 个点不回到 ii 时的最小代价这东西可以用树形DP搞出来。dfs过程中,开一个 hi,j,0..1h_{i,j,0..1} 表示当前点的前 ii 个儿子中,经过 jj 个节原创 2017-10-04 16:24:24 · 406 阅读 · 0 评论 -
[虚树] BZOJ3611: [Heoi2014]大工程
虚树裸题#include <cstdio>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N=1000010;int n,m,cnt,t,G[N],l[N],r[N],dpt[N];struct edge{ int t,nx;}E[N<<1];inline原创 2017-12-02 16:17:27 · 301 阅读 · 0 评论 -
[DP] LOJ#6172. Samjia 和大树
考虑暴力的dp fx,i" role="presentation">fx,ifx,if_{x,i} 表示 x" role="presentation">xxx 点权值为 i" role="presentation">iii 的方案数,这个dp数组是有对称性的。 再观察一下可以发现,大于 n∗k" role="presentation">n∗kn∗kn*k 且小于 m−原创 2018-01-26 19:59:49 · 435 阅读 · 0 评论