【杂题记录】♫ 杂题随心记 ♫

  最近常常刷一些奇奇怪怪的小题目,就随手开篇记录一下趴~

CF700B Connecting Universities —— 思维 - 分析答案上下界

    分别考虑每条边的贡献。要经过这条边,说明匹配的点中有一个在子树外部,一个在子树内部。若子树内部共有 \(size[u]\) 个点,那么最大的贡献即为 \(min(size[u], 2 * K - size[u])\) 。如何证明一定可以达到这个上界 / 这个上界对于全局一定最优?倘若一条边的贡献在答案中没有到达上界,说明至少有一对点在子树内部匹配,一对点在子树外部匹配。如果这时候变成两对子树内外的匹配,显然原本产生了贡献的边均不会失去贡献,而又会经过更多的边,必然不优。所以每条边一定会达到这个上界值。

CF732F Tourist Reform —— 思维 - Tarjans缩点 & 贪心

    首先可以明显的发现,如果原图中存在有环,我们可以使得这个环上的点可以两两到达。所以我们将这些环缩起来,则每一个强连通分量中每个点所能到达的点的下界即为强连通分量的大小。缩完点后我们得到的是一棵树,那么不论我们如何调整,总会有一个强连通分量的出度为0,也就是该强连通分量中的点的答案为最小值——该强连通分量的大小。我们显然让点数最大的作为这个‘根’。dfs确定答案即可。

CF500C New Year Book Reading —— 奇怪的题 - 贪心 & 模拟

    我想这题竟然都想了一会儿(撞墙)。这个把书放到最上面的操作实际上就已经表示如果阅读,那么它的位置与摆放位置无关。所以我们直接按照每本书第一次出现的时间次序为摆放次序就好啦……

CF842D Vitya and Strange Lesson —— 套路 - trie树 & 整体操作

    看到与位运算有关的第一个想到trie树,如果没有第一个操作而仅仅是求 mex 的话,我们就是在trie树上找到最靠左边的第一个空位。我们可以记录一下trie树上的每一个节点的子树是否已经满,贪心的走尽量靠左的一边即可。异或的操作由于是对于全局而言的,我们考虑直接在trie树上进行操作。异或上的数 x 如果在第 k 位上有 1,实际上就是原序列中的每个数在这一位均翻转一次。在trie树上走的时候我们人工转换一下翻转关系就行。

CF981D Bookshelves —— 技巧 - 贪心 & dp

  如果我们暴力dp的话,这肯定是不行哒。不过再一次看到位运算,我们有高位 -> 低位贪心鸭。我们考虑当前的第 K 位是否能够为 1,我们就设立状态 f[i][j] 表示 dp 到第 i 位,已经分成了 j 段,是不是能够满足异或值为 ans | (1 << K) 。如果可以,我们则将(1 << K) 加到答案中,否则跳过。复杂度成功降到 \(n^{2}logm\) (m 为值域范围)。

猜你喜欢

转载自www.cnblogs.com/twilight-sx/p/9846969.html