2023年11月随便做做
2023.11.16
Codeforces - 1408F - Two Different
(-3)
构造题,显然有一种想法可以在约 \(O(p2^p)\) 的复杂度内使一个长为 \(2^p\) 的数列变为全部相同。那么令 \(q = \lfloor \log_2n\rfloor\),可以对 \([1,2^q],[n-2^q+1,n]\) 各做一次操作,刚好可过。
2023.11.17
Luogu - P2664 - 树上游戏
(0)
好玩。随机跳到的(你怎么知道我最近在学点分治)。正解是点分治。但是可以 \(O(n)\) 做。因为是不同的颜色的计数,所以一个颜色对于一个点的贡献是(经过这种颜色 - 不经过这种颜色)的以这个点为起点的路径数。
然后会发现把相同颜色的点标出,可以把原树分为若干子树,子树到子树内的路径不含这种颜色,否则包含。然后对于不同颜色差分一下即可。
哈哈,但是没想好就开写,差分改了两次。
Luogu - P4819 - [中山市选] 杀人游戏
(-4)
很有意思的一道题,然而不难。
显然,若 \(x\) 认识 \(y\) ,则连边 \(x \to y\)。
如果通过询问确定了一个点,那么这个点可以到达的所有点都可以求得。
连通性相关,考虑缩点为 DAG。
这时我们有一些(缩完后的)点入度为 \(0\),然而如果我们需要确定所有点的信息,这些点必须在没有安全保障(即在没有确认其信息时)被访问,假设一共 \(t\) 个这样的点,那么求得所有信息且保证安全的概率就是 \(1-\frac{t}{n}\)。
然而这题说了必然有一个人是杀手,即我们加入确定了 \(n-1\) 的点的信息,则剩下的一个点必然可知其信息,所以如果存在一个(缩完后的)入度为 \(0\) 的点自身大小为 \(1\),且可以到达的点都可以被其他入度为 \(0\) 的点到达,则有更优的策略,使概率为 \(1-\frac{t-1}{n}\)。
Luogu - P6965 - [NEERC2016] Binary Code
(-3)
好玩。随便找点图论题做做还能找到这样好玩的题,幸运。
首先应该很容易想到在 trie 树上 Insert,连边跑 2-SAT。然后以为很简单直接开写,然后发现时间可能会假。
抱着 \(01\) 串 + 问号需要自己填 + NEERC 良心出题人 的期盼继续写,然后过了,最慢的点跑了 150ms。
正解应该在 trie 树上面做状态,再搞前缀优化。
但是发现有题解证明直接暴力建图是对的。嘿嘿。
题解这样证明:
先设字符总长为 \(L\),由题目 \(O(n)=O(L)\)。
对于 trie 树上一个点,设深度为 \(d\)。所以这个点最多同时是 \(O(\min(\frac{L}{d}, d))\) 个不定串的可能答案。
-
因为当 \(d<\sqrt{L}\) 时不同位置的问号总共只有 \(O(d)\) 个,所以数量是 \(O(d)\)。
-
因为当 \(d\ge\sqrt{L}\) 时最多只有 \(O(\frac{L}{d})\) 个满足的串。
到这里也不能有力地说明什么,但题解到这里就完了。
所以我来补充一下。
设一个点被作为 \(\alpha\) 个不定串的可能答案,根据四点:
- \(O(\sum \alpha) = O(n)\)
- \(O(\alpha) = O(\min(\frac{L}{d}, d))\)
- \(O(\sum d\alpha ) = O(L)\)
- \(O(n)=O(L)\)
可以推得边的数量为 \(O(\sum\alpha^2)=O(L)\)。
可能还需要考虑点在同一链上的情况,然而因为随着长度的递增,后面的串对前面的串的遍历会极大地下降。因为是求和,所以能知道单点复杂度仍然很低,况且还有良心出题人。
但上面的证明不严谨,还需要去重才能满足(题解也没提)。
而去重的性质是如果有超过 \(1\) 个相同的确定串或超过 \(2\) 个相同的不定串,则答案为 NO。
而我正好写了去重,也就直接过了。幸运。
2023.11.20
Luogu - P1477 - [NOI2008] 假面舞会
(-5)
毕竟是图论娱乐题,还是简单且有趣的。
会发现一个连通块内一个点确定,则整个块确定。然而可能会出现一个人存在多个编号的的情况,这时根据差作 \(\gcd\)。
然而因为差作 \(\gcd\),所以不需要因为编号的变化而重新更新一个点指向的节点。所以遍历图直接就是 \(O(n)\) 的。
注意最大的点数不一定是 \(n\),而是每部分连通块极差之和与 \(n\) 的更小值。没注意到会挂 \(20\)~\(50\) 分。
2023.11.21
Codeforces - 36E - Two Paths
(-1)
欧拉路的优秀题。如果只处于一个连通块内相当于是只要满足恰好有 \(0,2,4\) 个奇数度数的点即可。四个奇数点时,可以把任意两个奇数点连一条虚边跑欧拉路,再断开即可。
两个连通块则必须各满足存在一条欧拉路;有大于两个连通块时不成立。
2023.11.23
Luogu - P9194 - [USACO23OPEN] Triples of Cows P
(0)
好题。
不给自己找理由,这题的思路确实是第一次见。考虑正常的点合并不再行得通,所以可以把边扩展一下。
如果原本有 \(e_i:(u,v)\),则在扩展图中变为 \(e':(u,n+i),e'':(v,n+i)\),我们把扩展的点称为白点,原本的点称为黑点。我们每次删去一个点时把它周围所有白点合并为一个。
这时新树 \(T'\) 以及任意删除后的树 \(T''\) 均满足黑白相间,原问题相当于求一条简单路径 \(a\to x\to b\to y\to c\),使 \(a\) 是黑点。
不妨设 \(s_u\) 表示 \(u\) 的儿子个数。
那我们就分类讨论:
S1:
\(x=y\),考虑按 \(x\) 点算贡献为 \(P_{s_x+1}^3\) 即 \(s_x(s_x+1)(s_x-1)\)。
S2:
\(x\ne y \land [x,y \text{为}b\text{儿子}]\) ,考虑按 \(b\) 点算贡献为:
S3:
\(x\ne y \land [x\text{为 b 父亲,}y \text{为}b\text{儿子}]\) ,考虑按 \(x\) 点算贡献为:
然后求和化简就可以维护了。
本文作者:saubguiu
本文链接:https://www.cnblogs.com/imcaigou/p/17883905.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步