『5.12考试总结』

T1 AtCoder ABC153F - Silver Fox vs Monster

考虑贪心,为了消除最左边的那个怪兽,至少要进行\(\lceil\frac{a_1}{A}\rceil\)次操作,显然要让操作区间尽量靠右,使用树状数组维护即可,考试的时候把上取整打成了下去整。

T2 AtCoder ABC163E - Active Infants

考虑到\(x_i\leq 50\),所以任意时刻持有的银币数不必要大于\(\sum x_i\),那么可以把当前持有的硬币数和所在位置看做一个二维状态,跑最短路即可,考试的时候判定时乘法漏加一个\(1\mathrm{LL}\)

T3 AtCoder ABC 158F - Removing Robots

考虑启动一个机器人影响到的应该是一个区间,那么可以倒序处理,用线段树求出启动每个机器人会连锁启动的最后一个机器人,由此可以\(dp\):设\(f_i\)表示考虑\(i\sim n\)这些机器人,未启动集合的方案数,那么就有\(f_i=f_{i+1}+f_{next_i}\),注意边界,\(f_n=2,f_{n+1}=1\)。考试的时间受最近做的图论题影响一直在想建图做法,可以用线段树优化建图但是\(\mathrm{DAG}\)上似乎没有好的\(dp\)方案。赛后讨论时了解到可以通过另一种建图把连锁反应的关系建成一棵树,就可以树形\(dp\)了。

T4 AtCoder ABC 163F - Path Pass I

首先考虑单一颜色如何计算,可以用一步补集转化,求出树上每个同色点的位置,删去这些同色点通过树上连通块点数就可以求出不经过这种颜色的路径数,进而求出经过这种颜色的路径条数。那么考虑同时统计所有颜色,只需在\(dfs\)遍历树时考虑根颜色的连通块统计,计算出以根为最浅节点,每棵子树中不包含和根同色点的联通子树大小,进而就可以计算出当前这个分裂出的连通块里的路径数,从对应的答案数里减去即可。

考场思路:针对一种颜色可以使用点分治统计路径,这样就有\(\mathcal{O}(n^2\log _2 n)\)的暴力。考虑到每一次点分的关键是同色点,而同色点的数量远没有\(n\),那么可以对每种颜色建虚树,然后做带边权的点分统计,时间就优化到\(O(n\log_2 n)\)。因为怕调不出来所以没写。

posted @ 2020-05-12 15:31  Parsnip  阅读(228)  评论(0编辑  收藏  举报