【学习笔记】优化建图

Page Views Count

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

线段树优化建图#

建图方法#

支持以下四种操作:

  • uv 连边

  • u[l,r] 连边

  • [l,r]v 连边

  • [l1,r1][l2,r2] 连边

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

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

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

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

例题#

CodeForces-786B Legacy *2300#

没有区间连区间,建图完跑最短路,复杂度 O(nlognlog(nlogn))

Luogu-P6348 PA 2011 Journeys#

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

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

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

Luogu-P5025 SNOI 2017 炸弹#

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

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

前后缀优化建图#

建图方法#

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

对于序列的前后缀,可以对每个节点 i 新建两个复制节点 prei,sufi,连边为 preii,prei1,sufii,sufi+1,这样当需要连前缀 [1,i] 时,直接同 prei 相连即可,后缀同理。

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

例题#

Luogu-P6378 PA 2010 Riddle#

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

Luogu-P6965 NEERC 2016 Binary Code#

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

pi,0/1,ui,0/1 分别表示第 i 个串填 01 这一事件以及在 Trie 树上结束的位置,暴力做法是如果 ui,xuj,y 在 Trie 树上有祖先关系,那么 pi,xpj,¬y,pj,ypi,¬x 连边,跑 2-SAT。

先考虑 ui,xuj,y 的情况,即二者有祖先关系但不重合,连边可以视作 pj,y 向一个前缀所有 pi,¬x 连边,一个前缀 pi,x 向所有 pj,¬y 连边。

考虑前缀优化,分别建出内向树和外向树,在内向树中,ui,xpi,¬x,这样连 pj,yfauj,y 就是第一种连边;在外向树中,pi,xui,x,这样连 fauj,ypj,¬y 就是第二种连边。

ui,x=uj,y 的情况就是在一个节点内部连边,看做序列,连边就是与自己以外的相反状态相连,这也是一个前后缀优化。

需要特殊考虑不含 ? 的情况,若两个不含 ? 的串有前后缀关系直接不合法,若一个不含 ? 的串与一个含 ? 的可能结果有前后缀关系就连 pi,xpi,¬x

注意 Trie 树的节点数可能大于 5×105

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

作者:SoyTony

出处:https://www.cnblogs.com/SoyTony/p/Learning_Notes_about_Graph_Construction_Optimization.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   SoyTony  阅读(524)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示