- 坏了是不是好久没写总结了,之前格了一段时间,然后本来打算11.27写的,但是生病了/jk,后面就NOIP了,病现在好的差不多了来着/jk
- DAY10 T2
- 定义 \(f_s\) 表示 \(s\) 子集中,只考虑 \(s\) 的导出子图,1 能到达 \(s\) 里所有点的方案
- 定义 \(g_s\) 表示 \(s\) 子集中,只考虑 \(s\) 的导出子图,2 能到达 \(s\) 里所有点的方案
- \(E_s\) 为 \(s\) 内部边数
- \(f_s = 2^{E_s} - \sum_{t \subseteq s,t \neq s} f_t \cdot 2^{E_{s - t}}\)
- 考虑1能到达的点集是 \(s\),2能到达的点集是 \(t\)
- 如果 \(E_{s+t} = E_{s}+E_{t}\) 则 \(s\) 和 \(t\) 无交
- 答案为 \(\sum_{s交t等于空集} f_s \cdot g_t \cdot 2^{E(全集-s-t)}\) 时间复杂度为 \(O(3^n)\)
- DAY 10 T3
- 考虑 \(d_i\) 等于 0 的时候我想出来了 \(dp_i\) 表示 \(a\) 的值为离散化后第 \(i\) 小的时候 \(b\) 的最大值,然后考虑用线段树维护即可
- 最巧妙的一部在于 如何弄掉 $ + d_i$ 的操作
- 考虑 \(S_i = \sum_{j<=i} d_j\) 令 \(A_i = a_i - S_i, B_i = b_i - S_i, L_i = l_i - S_i, R_i = r_i - S_i\) 故我们可以把 \(a_i + d_i -> a_i\) 的操作转化为 \(A_{i-1} -> A_i\),第二步则能转换为 \(A_i <- \min(A_i, L_i), B_i <- \min(B_i, R_i)\) 然后用我们上述的做法做就行了
- CF916E 树链剖分+分类讨论
- AT_abc133_f
- 把NOIP T2按照记忆打了来着,然后在洛谷上过了,基本稳了/hanx
-
基环树
- 一棵树+一条边
- 无向基环树
- \(n\) 个点,\(n\) 条边,且 \(n\) 个点联通的图
- 有向基环树
- 外向基环树:每个点恰好有一条入边,形态上就是一个环往外走到链
- 内向基环树:每个点恰好有一条出边,形态上就是任意点出发都会走到环中
- 基环树的处理
- 1.断掉环上的某条边,一般适用于基环树DP,从断边两侧跑两次树形DP,汇总维护答案
- 2.找出环,将整个环视为根节点,看作树来处理,讨论经过环和不经过环的答案
- 无向基环树找环
- 方法1:只需要找到环上的一条边,考虑并查集
- 方法2:需要找到环上所有点和边,考虑类拓扑排序
- 有向基环树找环
- 方法1:dfs,从入度为0(或者出度为0)的点遍历并维护深度,当出现有深度的点 \(nxt\) 且 \(dep_nxt < dep_cur\),找到环 (首选)
- 方法2:类tarjan,维护栈,找强连通分量(scc)
- 方法3:拓扑排序
- 注意二元环
- P8655 P8943 找环板子题
- P2607,可以发现由多棵基环树/树,组成故对于基环树枚举一条在环上的边 \((u,v)\) 断掉,并考虑 \(u\) 不选/ \(v\) 不选的情况跑树形DP即可
- P4381 多棵基环树的直径之和
- 考虑一棵基环树的直径,以环作为根节点
- 拓扑排序,算出次长链与最长链求不经过环的最大路径
- 当直径经过环,则取环上两点 \(p1,p2\) 求 \(max(f_{p1} + f_{p2} + dis(p1,p2))\) (\(f_x\) 为以 \(x\) 为根的子树的最长链)
- 考虑前缀和优化枚举即可
- 然后晚上被赶去上语文课了。。。
posted @
2025-12-02 18:14
睡神本神
阅读(
1)
评论()
收藏
举报