8.19 lbw

傻逼题

给一张无向简单连通图,给每一条边定向,使得每一个点出度为偶数,输出任意一种方案或判无解。

\(n,m\le 10^5\)

$ $

$ $

$ $

$ $

$ $


先随便定向然后调整。记 degree 偶数的点为 BananaNode,奇数的为 MonkeyNode,目标是使所有点都为 BananaNode。

对于两个 MonkeyNode,找到一条路径并翻转每条边,发现路径中的 Node 形态不变,但两个点都会变成 BananaNode。

于是找路径即可。实际上可以建生成树然后树上差分简单维护。MonkeyNode 为奇数时无解。复杂度 \(O(m+n\log n)\)

$ $

$ $

$ $

有趣一点的题

给定一棵 \(n\) 个节点的树,要求构造出一个点权序列 \(E\),满足以下三个条件:

  1. \(\forall E_i\ge 1\)

  2. \(\forall(i,j)(1 ≤ i < j ≤ N)\)\(|E_i-E_j|\ge \operatorname{dist}(i,j)\)

  3. \(E\) 中的最大值最小。

\(n \le 2\times10^5\)

$ $

$ $

$ $

$ $

$ $


看到 Condition3,可能会考虑二分答案,但是这没有逼用。需要考虑 Condition2。

\(E_i\) 从小到大构造(拆绝对值)。记对应编号为 \(a_1,a_2,\cdots,a_n\)。那么有 \(E_i-E_{i-1}\ge \operatorname{dis}(a_{i-1},a_i)\)

其他不相邻的点呢?

实际上并不需要管它们,例如 \(i\ge j, E_i-E_j=\sum\limits_{t=j+1}^i E_t-E_{t-1}=\sum\limits_{t=j+1}^i \operatorname{dis}(a_{t-1}, a_t)\ge\operatorname{dis}(a_i,a_j)\)

于是只用考虑相邻点的限制了。考虑取等:\(\forall 1\le i<n, E_i-E_{i-1}=\operatorname{dis}(a_{i-1},a_i)\)

由 Condition1,令最小值 \(E_1=1\),那么有 \(E_x=1+\sum\limits_{i=1}^{x-1} \operatorname{dis}(a_i,a_{i+1})\)

这个时候就能用上 Condition3 了:需要最小化 \(E_n=1+\sum\limits_{i=1}^{n-1} \operatorname{dis}(a_i,a_{i+1})\)

注意到 \(\operatorname{dis}(a_1,a_2)+\operatorname{dis}(a_2,a_3)+\cdots+\operatorname{dis}(a_{n-1},a_n)+\operatorname{dis}(a_n,a_1)\ge2(n-1)\),可以通过 \(a_i\) 取 dfs 序达到下界。

\(E_n=1+2(n-1)-\operatorname{dis}(a_1,a_n)\)

只需要最大化 \(\operatorname{dis}(a_1,a_n)\)\(a_1,a_n\) 取树的直径端点,剩下的取 dfs 序即可。

$ $

$ $

$ $

暴力题

\(n\) 结点的无向图,初始时没有边,接下来 \(q\) 次操作:

  • \({\tt 1}\ u\ v\),加入一条连接 \(u,v\) 的边。保证操作前 \(u,v\) 不在同一个连通块内,换言之这张图总是森林。
  • \({\tt 2}\ u\ v\),询问是否存在和 \(u,v\) 都相邻的点,若存在输出编号,若不存在输出 \(0\)

\(n,q\le10^5\)

$ $

$ $

$ $

$ $

$ $


考虑怎样的点才能成为 \(u,v\) 的共点:

  • \(fa_{fa_u}=v\),共点即 \(fa_u\)
  • \(fa_{fa_v}=u\),共点即 \(fa_v\)
  • \(fa_u=fa_v\),共点即 \(fa_u\)

用启发式合并轻松做到 \(O(q\log n)\)

posted @ 2024-08-19 08:24  liangbowen  阅读(92)  评论(2)    收藏  举报