
树形DP
酷酷的Herio
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
蓝魔法师(树形DP)
蓝魔法师(树形DP)思路:以每条边进行状态转移,令dp[i][j]dp[i][j]dp[i][j]以iii为根的子树iii所在连通块大小为jjj的方案数。对于边edge(u,v)edge(u,v)edge(u,v),若不隔断该边,则dp[u][i+j]=∑dp[u][i]×dp[v][j] (i+j≤k)dp[u][i+j]=\sum dp[u][i]\times dp[v][j]\ (i+j\le k)dp[u][i+j]=∑dp[u][i]×dp[v][j] (i+j≤k)若隔原创 2020-08-05 18:51:55 · 474 阅读 · 0 评论 -
Tree(树形DP)
Tree(树形DP)不太熟,记录一下思路传送门思路:对于树上某一个点的连通点集的数量,我们可以以它为根进行树上dpdpdp。根据乘法原理:dp[u]=dp[u]×∏v∈son(dp[v]+1)dp[u]=dp[u]\times\prod\limits_{v\in son}(dp[v]+1)dp[u]=dp[u]×v∈son∏(dp[v]+1)举个例子:以aaa为根,显然dp[b]=dp[c]=1,dp[b]=dp[c]=1,dp[b]=dp[c]=1,通过边(a,b)(a,b)(a,b)产生的原创 2020-07-07 23:03:27 · 465 阅读 · 1 评论 -
异或生成树(树形dp)
异或生成树(树形dp)传送门题意:给定nnn个结点的权值ai∈[1,127]a_i\in[1,127]ai∈[1,127].求最大异或和生成树。思路:答案的范围为[0,127][0,127][0,127].考虑树形dpdpdp, 设dp[i][j]dp[i][j]dp[i][j]为以结点iii为根的子树答案是否为jjj对于当前结点uuu,遍历所有的子结点vvv ,有转移方程:dp[u][i⊕j] ∣=dp[u][i]&dp[v][j]dp[u][i\oplus j]\ |=dp[原创 2020-05-24 08:44:38 · 754 阅读 · 0 评论 -
牛牛染颜色 (树形DP)
牛牛染颜色 (树形DP)题目传送门思路:AC代码:#include<iostream>#include<cstdio>#include<cstring>#include<vector>using namespace std;const int mod=1e9+7,N=1e6+5;typedef long long ll;int...原创 2020-04-26 21:23:09 · 725 阅读 · 0 评论 -
HDU2196.Computer(树形DP)
HDU2196.Computer(树形DP)题目传送门思路:每个结点的最大距离转化为到子树结点的最大距离与到上部最大的距离的较大值。到上部最大距离要分两种情况(在最长距离子树上和不在最长距离子树上)通过两次DFS就可完成状态转移。具体看代码。AC代码:#include<bits/stdc++.h>using namespace std;const int N=1e5+5;...原创 2020-04-26 17:09:43 · 353 阅读 · 0 评论 -
HDU1520.Anniversary party(树形DP&DFS)
HDU1520.Anniversary party(树形DP&DFS)题目传送门思路:状态转移方程有两个:1.不选父结点,则加上子结点选或者不选的最大值,2.选父结点,则加上不选子结点的最大值。具体看代码。AC代码:#include<bits/stdc++.h>using namespace std;const int N=6e3+5;int dp[N][2],n...原创 2020-04-26 16:08:49 · 383 阅读 · 0 评论