随笔分类 - ACM
大二到大三不堪回首的记忆....
摘要:原题链接 考察:树形dp+约数 思路: 预处理约数之和,用倍数法,时间复杂度10^6次方左右,sum[i]<i的建立边.通过打表可知是不止一棵树,也就是数字建立的图是森林.对于遍历过的点标记一下,没标记的遍历即可.最后就是求树的直径. 倍数法中:j枚举了i的倍数 1 #include <iostre
阅读全文
摘要:原题链接 考察:树形dp+二分 这道题正解思路有点像二分典型题搬石头.本蒟蒻是没想出来... 思路: 这道题有3个限制条件: 裁取的边要使得叶子不能到1. 裁取的边和要<=m 裁取的边的权值要尽量小. 直接递推根本递推不出来,如果设置叶子节点的f[u] = INF,那么叶子结点到父节点之间的边权值一
阅读全文
摘要:原题链接 考察:树形背包dp 本来不想写这篇的题解,因为和前面的题重复了...但是WA了3次才对,还是写一下吧.. 思路: 将每20个虫子看成财宝的一个体积.m是背包的体积.这就是带体积的树形背包问题了.但是要注意的是,当某个洞穴虫子=0,我们还需要派人去拿.这个处理很简单,让f[u][0]=0就可
阅读全文
摘要:原题链接 考察:树形dp 树的重心变种题 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。(不止一个) 模板题 树的重心 思路: 把树的某个点删去后,剩余部分是不包含父节点的子节点连通块.已经删去点的父节点连通块.通过dfs可以求出
阅读全文
摘要:原题链接 考察:树形dp 本蒟蒻是完全没思路,看了网上的题解思路普遍是: 对于一棵树,每拆掉一条边就形成一条链.对于一个有多子节点的结点u,我们可以保留父节点到u的边和u到一个子节点的边.也可以保留两个子节点的边去掉其他的边.看了大部分题解都是默认去掉父节点边是最优解. 本蒟蒻是没想出来证明 = =
阅读全文
摘要:原题链接 考察:树形dp(?) 思路: f[i]表示i往下(包括i)的点权值和.对比学生总和sum-f[i]与f[i]的大小即可. 这题貌似和m没多大关系.m一定=n-1. 1 #include <iostream> 2 #include <cstring> 3 #include <cstdio>
阅读全文
摘要:原题链接 考察:树形dp 关于本题的相关题目 10. 有依赖的背包问题 和 1074. 二叉苹果树 都是一个套路. 思路: 有依赖的背包问题套模板题.关于几点需要再修正: 绝对不要在dfs遍历连接点的时候+w[u].因为f[u][j] = max(f[v][k]+f[u][j-k],f[u][j])
阅读全文
摘要:原题链接 考察:树形dp 这道题战略游戏要求看到所有的边,本题要求看到所有的点 没想出来,参考了大佬的思路 照搬大佬的思路: 设树上某点u能被看见,这个点要么自己安插士兵,要么父节点安插士兵,要么子节点安插士兵.设f[u,st]表示u的st状态的最小花费.st==0时,它u被父节点看见,st==1,
阅读全文
摘要:原题链接 考察:树形dp 思路: 因为要观察到所有的边,所以每条边上的点至少要放一个士兵,对于某子树的根u,f[u][1] = min(f[v][1],f[v][0]),f[u][0] = f[v][1]. md,我是zz,看成要看到所有的点,导致这道题我没想出来= = 1 #include <io
阅读全文
摘要:原题链接 考察:树形dp 思路: 树形背包的时间复杂度是O(n3) 按划分给子节点的体积来分配集合.思路与苹果树大体相同.关于几个问题需要解释下: 为什么不和苹果树那题一样在遍历点的时候+w[u]. 答: k不一定能装下,会使得背包里的价值多了.除此之外,f[u][j] = f[u][j-k]+f[
阅读全文
摘要:原题链接 考察:树形dp 求保留边后树边权值最大和 思路: 因为选择子节点必须选择父节点,对于一个父节点u,它的两个子节点v1,v2.v1可以选择m条边,那么v2就能选择q-m-1-1条边对于每个一个树的结点,都能这样枚举,所以动态转移方程为f[u][j] = max(f[u][j],f[u][j-
阅读全文
摘要:原题链接 考察:树形dp 1072. 树的最长路径 该题的延伸 思路: 上题求的是父节点往下的最大值+次大值.这道题求的是点与点的最大距离.这个可以是该点往下的最长距离,也可以是该点往上的最长距离.假设某点为根,往下的最长距离上一题已经求出.往上的最大距离是:到父节点的距离+max(父节点往下的最大
阅读全文
摘要:原题链接 考察:树形dp 思路: 从定义出发我们需要枚举所有路径,但直接枚举两个点直接的路径会超时,所以要分类集合枚举.已知树的路径一定会经过某个点,那么我们以点来分类集合.以路径的最高点来分类,经过这个点的最长路径 = 经过此点最长边+经过此点次长边.因此状态转移方程 f[u] = f[v1] +
阅读全文
摘要:原题链接 考察:状压dp 本蒟蒻是完全没思路...基本照抄大佬代码 照搬大佬的思路: 首先要知道包围两个点的最小矩形面积是两个点刚好在矩形的对角线上.根据这个我们构造n*(n-1)/2个矩形.对于每个点我们检查矩阵是否将它包含在内部,如果包含就记录下来.这样每个矩形都有它包含的点集.根据这个dp方程
阅读全文
摘要:原题链接 考察:状压dp POJ 3254的延伸题 思路: 讲牛的需求看成看成肥沃的土地,也就是把谷仓看成一个矩阵.与牛的需求相符的位置可以养牛.这样就变成了POJ 3254差不多的题.f[i,j]表示前i头牛谷仓的养殖情况.状态转移方程是f[i][j] += f[i-1][k]. 这道题直接枚举i
阅读全文
摘要:原题链接 考察:状压dp 思路: 考虑到计算三角形,我们需要知道落脚点i和前一个落脚点j,所以需要三维数组.根据状态转移方程f[i][j][k] = f[i-{j}][k][t]+score很容易求出最大的权值.但是比较难想到怎么计算路径数目(对本蒟蒻而言).方法是再声明一个记录当前路径最大值的方案
阅读全文
摘要:原题链接 考察:状压dp 本题是731. 毕业旅行问题的延伸 思路: 与上面那道题不同的是每个点至少走一次,而不是只能走一次.普通的dp求出的是0到i点的最短距离(且每个点都经过一次),但这里我们还需要回程,也就是还需要求出i到0点的最短距离.我们手操可以发现ans=每个点都经过一次的最短距离+回程
阅读全文
摘要:原题链接 考察:状压dp 这个是AcWing 1064. 小国王那道题的扩展 思路: 这道题与小国王的区别在于前两行影响当前行.并且这道题我们求的是炮的最大数量.有几点必须说明: 不能效仿小国王开dp数组f[i,i行状态],如果这样写状态转移方程就是f[i,j] = f[i-2,k]+cnt[j]+
阅读全文
摘要:原题链接 考察:状态压缩dp 这道题是 91. 最短Hamilton路径 的变种 思路: 很容易在优先级问题上陷入死循环(仅限本蒟蒻),实际上一开始做的时候,第一个汉堡要求食材必须是0,等同于从0点出发.设置f[0]=0,其他都=-99999999这样就可以避免样例给的死循环问题. 以i状态更新可以
阅读全文
摘要:原题链接 考察:状压dp 这道题的扩展题 91. 最短Hamilton路径 思路: 首先要处理这几点: 可以以任意点为出发点,也就是说初始化f[i点为1,其余点为0的状态][i] = 0. 预处理10位以内的3进制数. 设定f[i][j]为最后的落脚点为i,此时的状态为j.集合划分为倒数第二个点为k
阅读全文

浙公网安备 33010602011771号