Loading

【学习笔记】优化建图

Page Views Count

在最短路、强连通分量、2-SAT、网络流等图论问题中,边数有时达到 \(O(n^2)\) 甚至 \(O(n^3)\),成为时间或空间复杂度的瓶颈所在,使用优化建图可以在不影响效果的情况下建出边数更少的图。

线段树优化建图

建图方法

支持以下四种操作:

  • \(u\to v\) 连边

  • \(u\to [l,r]\) 连边

  • \([l,r]\to v\) 连边

  • \([l_1,r_1]\to [l_2,r_2]\) 连边

区间操作想到线段树,可以把区间拆成 \(\log n\) 个线段树上区间。先按照线段树建出两棵树:外向树和内向树。对于所有连入一个区间的操作,将边连向外向树,这代表着连入一个大区间的边在经过外向树边后,也可以连入小区间;对于所有从一个区间连出的操作,将边从内向树连出,这代表着一个小区间在经过外向树的边后,可以连出大区间的边。

为了避免冲突,将外向树的编号从 \(1\) 开始,内向树的编号从 \(4n\) 开始,单个节点的编号从 \(8n\) 开始,且要与两棵树的叶子相连。

区间与区间相连按照上面做法是 \(O(\log^2 n)\) 条边,可以新建两个节点以一条边相连,将边权设置在这条边上。内向树对应区间全部由其中一个节点连入,外向树对应区间全部连到另一个节点,这样就只有 \(O(\log n)\) 条边。

总点数大概在 \(10n\) 左右,总边数是 \(O(m\log n)\) 级别。

例题

CodeForces-786B Legacy *2300

没有区间连区间,建图完跑最短路,复杂度 \(O(n\log n\log (n\log n))\)

Luogu-P6348 PA 2011 Journeys

只有区间连区间,优化建图后跑 01 BFS。

Luogu-P8021 ONTAK 2015 Bajtman i Okrągły Robin

二分图最大权匹配,转成费用流模型,把代表时刻的右部点优化建图。

Luogu-P5025 SNOI 2017 炸弹

先缩点,注意到每个强连通分量一定是连续区间,那么可以波及的范围也是连续一段区间,只需求出可达的端点,拓扑转移。

缩点过程用线段树优化建图。

前后缀优化建图

建图方法

可以用于连边区间序列的前后缀或树上根链的情况。

对于序列的前后缀,可以对每个节点 \(i\) 新建两个复制节点 \(pre_i,suf_i\),连边为 \(pre_i\to i,pre_{i-1},suf_i\to i,suf_{i+1}\),这样当需要连前缀 \([1,i]\) 时,直接同 \(pre_i\) 相连即可,后缀同理。

对于树上根链,直接建内向树,连根链末尾即可。

例题

Luogu-P6378 PA 2010 Riddle

2-SAT 模型,第一类边是 \(O(n^2)\) 级的,注意到连边为整个集合除了本身的所有节点,就是一个前缀一个后缀。

Luogu-P6965 NEERC 2016 Binary Code

先建出 Trie 树,若一个串有 ? 则将两种可能都插入。

\(p_{i,0/1},u_{i,0/1}\) 分别表示第 \(i\) 个串填 \(0\)\(1\) 这一事件以及在 Trie 树上结束的位置,暴力做法是如果 \(u_{i,x}\)\(u_{j,y}\) 在 Trie 树上有祖先关系,那么 \(p_{i,x}\to p_{j,\lnot y},p_{j,y}\to p_{i,\lnot x}\) 连边,跑 2-SAT。

先考虑 \(u_{i,x}\neq u_{j,y}\) 的情况,即二者有祖先关系但不重合,连边可以视作 \(p_{j,y}\) 向一个前缀所有 \(p_{i,\lnot x}\) 连边,一个前缀 \(p_{i,x}\) 向所有 \(p_{j,\lnot y}\) 连边。

考虑前缀优化,分别建出内向树和外向树,在内向树中,\(u_{i,x}\to p_{i,\lnot x}\),这样连 \(p_{j,y}\to fa_{u_{j,y}}\) 就是第一种连边;在外向树中,\(p_{i,x}\to u_{i,x}\),这样连 \(fa_{u_{j,y}}\to p_{j,\lnot y}\) 就是第二种连边。

\(u_{i,x}=u_{j,y}\) 的情况就是在一个节点内部连边,看做序列,连边就是与自己以外的相反状态相连,这也是一个前后缀优化。

需要特殊考虑不含 ? 的情况,若两个不含 ? 的串有前后缀关系直接不合法,若一个不含 ? 的串与一个含 ? 的可能结果有前后缀关系就连 \(p_{i,x}\to p_{i,\lnot x}\)

注意 Trie 树的节点数可能大于 \(5\times 10^5\)

点数和边数巨大,但是可以通过。

posted @ 2023-07-11 11:44  SoyTony  阅读(257)  评论(0编辑  收藏  举报