随笔分类 - 动态规划 -- 树形dp
摘要:[POI2014]FAR FarmCraft "P3574 [POI2014]FAR FarmCraft" 随手扒拉的一道题 害不错 $n$个电脑,管理员送达花费的时间是$a_i$,管理员只能一个个用户地送电脑。用户安装程序花费的时间是$b_i$,安排送电脑的顺序,使最晚安装完电脑的用户花费的时间最
阅读全文
摘要:APIO2010 巡逻 k==1时直接减去直径的长度 k==2时 当两个环无重叠时直接减去第一次的直径还有第二次 有重复 可以发现重复部分会走两次 将第一次直径上的边权改为 1 然后再跑一遍直径 然后$ans=2 n l_1 l_2$ 具体咕咕咕 注意第二次找直径不能用两次bfs或者dfs 要用树形
阅读全文
摘要:"[BZOJ2427]" "[luoguP2515]" 每个人都至多有一个依赖点 所以有可能成环 先tarjan缩点并处理出环的信息wei va 再将缩点后的图重新连接 将入度为0的点和0点连接 这样就构成了一颗树 由此做树形dp 只有父亲节点选了它的儿子才能选 所以在访问进去时先把wei[u]~m
阅读全文
摘要:"P1453城市环路" 最开始是按骑士那道题的做法 只是这道是双向边 先dfs一遍判环 根节点一定在环上 然后从根节点出发 强制不选根节点的父亲 因为建的是双向边dfs来dp的时候会重复算 所以用vis来记录这个点有没有走过 然后再来一遍从根节点的父亲出发 不选根节点的父亲的父亲 不知道为啥我第二遍
阅读全文
摘要:"[ZJOI2008]骑士" 很容易就能想到将一个骑士不喜欢的骑士设为他的父亲 每一个骑士只有一个讨厌的人 那么它的入度只能为1 所以对于每个连通块 它一定有且只有一个包含根节点的环 所以将环拆开 第一遍dp为不选它的父亲 第二遍dp为不选它的父亲的父亲 ~~(其实我也不太明白为啥这么搞)~~ c+
阅读全文
摘要:"[CQOI2009]叶子的染色" $f[x][0/1/2]$分别表示x点染为黑/白/不染x为根的子树满足条件的最小染色点数 然后就是注意初始化ovo c++ include using namespace std; define ll long long define rg register de
阅读全文
摘要:"P4322 [JSOI2016]最佳团体" 二分+树形dp 树形dp部分就和选课一样 就是r按照最保险的来赋的话会超时... 然后看了大佬的代码大佬r=3.3 QAQ 会T的那种 define ll long long define Abs(x) ((x)(y)?(x):(y)) define M
阅读全文
摘要:3177 [HAOI2015]树上染色
阅读全文
摘要:3174 [HAOI2009]毛毛虫 求一条链链上的节点和与链上节点相连的兄弟和最大 在链上每个节点都被多算了一次 所以初设为1 虽然还没有搞清为什么要像树的直径一样跑两遍...
阅读全文
摘要:P2986 [USACO10MAR]伟大的奶牛聚集 树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡 性质: 树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样 把两棵树通过一条边相连,新的
阅读全文
摘要:P1131 [ZJOI2007]时态同步 要求使用最少的道具使得其同时到达叶结点 越靠近根节点使用道具影响范围越大 但小处又不一定 故从先从叶结点开始伸长 再往祖先延伸 可以参考这个
阅读全文
摘要:P1273 有线电视网 好早之前就叫做的题了qwq 我太垃圾了现在才跑来把它做了 f[i][j]表示当前节点i 选了j个用户 其实不用建双向的 因为是一个以1为根节点的树 而且它按顺序输入qwq
阅读全文
摘要:P2458 [SDOI2006]保安站岗 最终决定重新打一遍这题 然后被儿子覆盖的这个情况还是重新看一遍以前的代码才捋清楚QAQ 每个点有三种状态 自己覆盖自己 被父亲覆盖 被儿子覆盖 然后要注意被儿子覆盖时的转移 最后如果都是儿子被孙子覆盖的花费更少的话 得选一个儿子自己覆盖自己花费最少的来覆盖
阅读全文
摘要:P4408 [NOI2003]逃学的小孩 就是求一个树的直径 然后再在这个路径中找一点 emmmmmm大概那个意思 就这样吧emmmm 详见代码
阅读全文
摘要:POJ - 2631 我太水了 发现树的直径好像没有弄透彻 然后就重新清理了一遍 把树形dp的做法和两遍dfs的做法重新清理了一遍 树形dp求树的直径 核心: #include<bits/stdc++.h> using namespace std; const int N=1005; const i
阅读全文

浙公网安备 33010602011771号