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\) 点算贡献为:

\[\begin{aligned} & \sum_{x\in son_b}\sum_{y\in son_b \land x \ne y} s_xs_y \\ =&(\sum_{x\in son_b}s_x)^2-(\sum_{x\in son_b}s_x^2) \end{aligned} \]

S3:

\(x\ne y \land [x\text{为 b 父亲,}y \text{为}b\text{儿子}]\) ,考虑按 \(x\) 点算贡献为:

\[\begin{aligned} & 2(s_x-1+1)\sum_{b\in son_x}\sum_{y\in son_b} s_y \\ =&2s_x\sum_{b\in son_x}\sum_{y\in son_b} s_y \end{aligned} \]

然后求和化简就可以维护了。

posted @ 2023-12-25 20:17  Imcaigou  阅读(31)  评论(0编辑  收藏  举报