HDU 树型dp】的更多相关文章

HDU 4123 Bob's Race 题意:定义每个点的值为它到树上最远点的距离,每次询问q,回答最长的极值差小于等于q且编号连续的一段点的长度. 题解:求距离两次dp,求极值ST表+尺取法. HDU 4514 湫湫系列故事--设计风景线 题意:给一张图,如果有环,输出YES,否则为一个森林,求出每个树的直径,输出最大值. 题解:并查集判环,两边dfs找直径. POJ 1655 Balancing Act 题意:删掉一个点,使得分出的最大连通块大小最小 题解:求重儿子,用重儿子大小和(n-sz…
题目链接  Black White Tree 树型DP,设$f[i][j]$为以$i$为根的子树中大小为$j$的连通块中可以包含的最小黑点数目. $g[i][j]$为以$i$为根的子树中大小为$j$的连通块中可以包含的最大黑点数目. $F[i]$为大小为$i$的连通块中可以包含的最小黑点数目 $G[i]$为大小为$j$的连通块中可以包含的最大黑点数目 做一遍树上DP即可. #include <bits/stdc++.h> using namespace std; #define rep(i,…
传送门 题目大意: 一颗n个点的树,给出m条链,第i条链的权值是\(w_i\),可以选择若干条不相交的链,求最大权值和. 题目分析: 树型dp: dp[u][0]表示不经过u节点,其子树的最优值,dp[u][1]表示考虑经过u节点该子树的最优值(可能过,可能不过),很明显:\[dp[u][0] = \sum\{max(dp[v][0], dp[v][1])\} v是u的儿子\], 下面来算dp[u][1]: 考虑一条经过u(以u为lca)的链,他经过子树中的节点v(可能有多个),那么\[dp[u…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1561 The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7031    Accepted Submission(s): 4121 Problem Description ACboy很喜欢玩一种战略游戏,…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 16276    Accepted Submission(s): 4335 Problem Description You, the leader o…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8233    Accepted Submission(s): 3574 Problem Description There is going to b…
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. 树上的每个结点作为其子树的根可以有三个状态: 不属于支配集且还没被支配 不属于支配集但被其孩子支配 属于支配集 那么就是用dp[u][1\2\3]来作为动归的状态,表示结点u为根子树的且u状态为1.2.3的最小支配数. 123转移该怎么转移就怎么转移..最后的结果就是min(dp[root][2],…
好久没写树型dp了...以前都是先找到叶子节点.用队列维护来做的...这次学着vector动态数组+DFS回朔的方法..感觉思路更加的清晰... 关于题目的第一问...能邀请到的最多人数..so easy了...很基础的树形DP..dp[k][0]表示以k为根的子树不选k点时的最大人数...dp[k][1]代表选k点时的.... 关键是题目要求判断是否最优解唯一...首先如果状态a可以转移到状态b并且状态a达到最优方案的方式不唯一....那么转移得到的b最优方案的方式也必然不唯一...那么可以用…
题目描述 给你一棵树,你要从\(1\)号点出发,经过这棵树的每条边至少一次,最后回到\(1\)号点,经过一条边要花费\(w_i\)的时间. 你还可以乘车,从一个点取另一个点,需要花费\(c\)的时间. 你最多做\(k\)次车. 问最短时间. \(k\leq n\leq 20000,w,c\leq 50000\) 题解 我们考虑把最终路线中坐车的部分替换成走路. 那么显然不会经过一条边超过两次. 但是每条边都要经过者少一次,所以每条边只能被一个坐车的路线覆盖. 所以我们要选择不超过\(k\)条不相…
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就是个树型dp嘛,关键是怎么设状态 首先肯定是想到设f[i][j]:以i为根的子树中选了j个点 这个时候发现布星昂,这么设的时候我们不能得到对于到根的路径上的点的贡献鸭,所以就考虑加一维 所以f[i][j][k]:以i为根的子树中选了j个点,最近祖先的距离为k的最大代价 然后直接转移就好 对了还要说一…