首页 > 血压游戏
头像 四糸智乃
发表于 2020-04-18 17:06:32
本题解需要掌握dsu on tree和长链剖的相关知识。 具体可以见我的博客 dsu on tree:https://blog.nowcoder.net/n/a84c24c37daf450d8bf9db81607c8f98 长链剖分:https://blog.nowcoder.n 展开全文
头像 HgWalK
发表于 2020-04-18 21:33:46
中规中矩的虚树写法 不难发现,只有同一深度的松鼠才会打架。 那就easy了啊,把同一深度的所有点拎出来,建一棵虚树,合并一下,就好了。 对于一个点,记表示到达该点的松鼠数量,那么 其中表示在原树上的深度。这个方程应该很好理解吧(雾。 然后每次把答案加上就好了(注意要满足先)。 复杂度:瓶颈在求lca 展开全文
头像 User_Does_Not_Exist
发表于 2020-04-18 17:34:57
Nowcodercontest5278G血压游戏 做法非常多。。。 比如对于同一层的点直接建立虚树,然后模拟dp即可 如果不想建虚树,可以直接维护合并,每次合并得到的一定是同层点按照dfs序排序之后相邻两点的之一 处理出所有这样的LCA,然后按照dep从大到小依次操作 用一个set维护,每次取出子树 展开全文
头像 ShepherdsPurse
发表于 2020-04-21 01:55:06
来一个的做法:直接采用长链剖分,做到时间复杂度为, 不需要线段树之类的结构 知识点:长链剖分 长链剖用于解决:子树类与深度相关可合并的静态查询类问题,基础复杂度为 流程:相对于重链剖分,相当于把size换成长度,重儿子也是长度最长的儿子 性质 性质一:所有链长度和是级别的 这是因为所有点在且仅 展开全文
头像 s_r_f
发表于 2020-04-18 19:04:07
一颗 个点的以为根的树 树上有一些松鼠 记点 上的松鼠数目为 进行若干次以下步骤直到所有都为 对于所有 令 对于所有 令 , (其中 表示 的儿子集合 下同) 求最后的 通过观察可以发现不同深度的点之间互不影响 所以我们可以对于每种深度的点分别考虑 建出虚树然后记为子 展开全文
头像 蒟蒻wjr
发表于 2020-04-20 11:41:32
需要掌握线段树合并的基本知识。 显然只有同一深度的会合并,我们将每次合并后的线段树在头结点打一个递减标记、 每次合并需要将其标记下传,最后在叶节点之间的合并中使用上这个函数,因为只有头结点统计答案,所以到头结点时标记全部下传即可。 #include <cstdio> #include & 展开全文