Loading

20220314 刷题日记

CF1442D

这个题还是很好做的,重点是发现最多只会有一条不选的线段,然后 分治背包 就可以了。

BZOJ4771

注意到我们有一个深度的限制,并且强制在线。

首先不考虑限制,如何处理一棵子树内颜色出现的次数?对于两个颜色来说,我们在这两个节点上加一,然后再lca 上减一就可以了。

对于一条由相同颜色点组成的序列,我们按照 dfs 序进行排序,我们考虑对相邻的两个点做上面的处理,同时对于一个点,其前驱后继的 lca 同样减一。

考虑这样做为什么是对的,我们给某个点加一之后,为了能够查询子树和就可以得到信息,我们需要从这个点往上走,走到第一个点,满足其子树内有另外相同颜色的点,把它减一,这样就可以正确维护。

容易发现,这个点一定是该点与其 dfs 序上前驱后继的 lca。但是我们并不知道是哪一个。所以我们都减去,然后给这两个 lca 的 lca 再加回来,容易发现这两个 lca 一定在一条链上,原因是它们都是该点的祖先。

接下来考虑限制,容易发现这就似乎是下面的点全都不见了,然后询问,所以我们考虑对每个深度建一棵线段树即可,主席树优化空间,就可以通过这道题。

查前驱后继有 set 即可。

CF1446C

考虑到最后我们实际上是只能找到一组数,互为最小,所以考虑到 Trie 树的性质,我们直接在 Trie 树上 dp 就可以完成。

T11738

考虑链加和子树加都可以重链剖分之后差分,然后差分后变成若干前缀操作,可以用树状数组,更好的做法是排序完了之后离散化,然后直接做就行。

能离线先考虑离线,因为在线是不优于离线的。

CF1439B

考虑如何得到一个点集,满足每个点的度数大于等于 \(k\),可以考虑用类似拓扑的方法,每一次从图里删掉度数小于 \(k\) 的点,并更新点的度数。

考虑一个 \(k-1\) 度点组成的 \(K_k\),我们考虑怎么做,我们只需要删点,如果删到了一个 \(k-1\) 度点,把它和它相连的点拉出来看是不是团。

这样做的复杂度呢,容易知道 \(k\)\(\sqrt{m}\) 级别的一个数,我们判断是否有边可以通过在 vector 二分,所以我们可以做到 \(k^2\log m\),所以判断复杂度为 \(m\log m\) 的。我们最多要判断 \(\frac{m}{k}\) 次,所以大概是一个 \(m\sqrt{m}\log m\),反正可以过。

ARC117VP

结果制作出来 ABC 题,D 题没做出来。

posted @ 2022-03-15 07:40  hyl天梦  阅读(37)  评论(0编辑  收藏  举报