![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dfs
拔光祖国小草
存放一下做的题。
展开
-
Codeforces 767C Garland (dfs)
题意:有一棵树,每个节点都有一个权值,需要分成相等的三部分,能则输出剪下的结点否则输出-1(有一个坑是不能剪下根节点)题解:算是看了大佬的解法,首先判断是否sum为3的倍数。 dfs子节点的权值累加,如果找到一个sum/3,记录该结点然后将这个结点清0,因为有一种情况是某一个父节点和子节点都可能是sum/3,否则会出错。 找到2个则输出否则输出-1。代码:#include #i原创 2017-05-18 21:23:02 · 324 阅读 · 0 评论 -
codeforces 918D(组合游戏+记忆化搜索)
题意:在给定的一个有向无环图上,两个人分别从一个点出发,两人轮流从当前点沿某条边移动,要求经过的边的权值不小于上一轮对方经过的权值直到某一方不能移动。求一个n*n的胜负表可能是我没学过组合游戏的关系?当时dfs不知道怎么转移 题解: dp[x][y][c],表示先手在x,后手在y,上一次经过边权为c的胜负状态(1胜0负),此时从x往后走,假设从x->u,边权为v,要求v>=...原创 2018-02-13 21:16:35 · 275 阅读 · 0 评论 -
HDU5692(dfs + 线段树)
题解:是个好题,对于经过某一点的最大值,可以将某一点作为根,他的子树中到0的最大值即为解。那么这样,可以用dfs跑出一个序,即当前点到0的值,每个点维护一个L,R区间,那么这个区间的点就是它的子树。对于单点更新一个值,那么就变成区间更新,更新这个点L,R区间所以点的值,对于查询,就是L,R区间中的最大值 (注意LL和INF)#include <iostream>#include...原创 2018-03-13 17:35:09 · 217 阅读 · 0 评论 -
Gym - 101128A(dfs)
当成拓扑写了,少了很多情况 维护一下当前这个人控制的人数 = x,和选这个人需要选的人 = y, 那么对于某个人必选,就是这个人不选(控制的人也就不能选了),剩下的人不足a (b) ,就必选 n - x < a (b) 对于某个人不可能选中,就是选这个人需要的人y > b#include <iostream>#include <algorithm&g...原创 2018-04-11 23:04:20 · 189 阅读 · 0 评论 -
FZU 2277 (dfs序+线段树)
用dfs序可以维护出所有子节点 对于更新,我们将更新变为deep[i]k−deep[j]kdeep[i]k−deep[j]kdeep[i]k - deep[j]k,deep[j]kdeep[j]kdeep[j]k就是当前自己的深度,是可以直接计算的,那么对于deep[i]kdeep[i]kdeep[i]k,就是父亲节点的深度,另外别忘了还有xxx,所以我们对于父亲节点的所有儿子首先更新x+dee...原创 2018-04-13 09:39:50 · 339 阅读 · 0 评论