优化建图技巧
已完成[8/11] 题解[8/11]
1.P5025 [SNOI2017]炸弹(紫)
容易想到每个炸弹向它爆炸范围内的炸弹连边,跑多源搜索,能抵达的节点数量即是答案。
考虑线段树建边优化,线段树内父亲向儿子连边,炸弹向范围区间连边,边数 条。
然后 tarjan
缩点成 DAG
,跑搜索记录能到达的最左右端点即可。
时间复杂度 。
2.P3588 [POI2015] PUS(紫)
貌似是差分约束。
区间向区间连边,线段树优化建边,建虚点。
具体地,按套路建儿子向父亲连边的线段树,把操作区间分割的最多 个子区间向虚点连边,虚点向给的 个点连边,边数 。
接着拓扑跑最长路即可。
对于确定的数,即 已确定。
时间复杂度 。
3.P5471 [NOI2019] 弹跳(紫)
相当于例题加强成二维矩阵。
考虑树套树优化建图,外层线段树,内层动态开点线段树,空间复杂度 ,边数 ,无法通过。
优化 :树套树内层换成 set
空间复杂度 。
优化 :不直接连边,每次从树套树里取出扩展即可,
优化 :由于 dij
上每个节点只会被删除和扩展一次,所以取出扩展完删除即可。
时间复杂度 ,空间复杂度 。
4.P5331 [SNOI2019]通信(黑)
网络流模型:
,容量为 ,费用为 。
,容量为 ,费用为 。
,容量为 ,费用为 。
,容量为 ,费用为 。
跑最小费用最大流即可,边数 。
考虑优化,由于限制 且费用带有绝对值。
考虑 cdq
分治,每次右区间向左区间连边。
首先将区间内权值排序去重,连成一条链,费用为相邻两点之差,将其作为连接左右区间的虚点。
具体地,区间点向虚点连边时,向权值对应链上的位置连边即可,这样就通过累积权值之间的差值实现了费用的绝对值(yytj。
5.P6378 [PA2010] Riddle(紫)
点的状态必然是选或不选,考虑 2-SAT
。
记 表示选, 表示不选。
对于边的限制,至少一点选,直接 ,,表示不选 必选 ,不选 必选 。
对于部分的限制,一个点向该部分中除它以外的所有点连边,直接连边数是 的。
考虑前缀优化建图。
记 表示前 个点有关键点, 表示前 个点没有关键点。
部分内连边:
,,表示选 前 个就有关键点。
,,表示前 个点有关键点那么前 个点有关键点。
,,表示前 个点有关键点那么 不选。
时间复杂度 。
6.CF1215F Radio Stations(2700)
2-SAT
。
先看限制一, 至少有一个,连边 即可。
限制二, 最多有一个,连边 即可。
限制三,选择的点的区间有交集,记任意一点 ,考虑前缀优化建图,记 表示 , 表示 。
连边:
,。
。
。
。
。
最后建图跑 tarjan
即可,时间复杂度 。
7.CF1007D Ants(3200)
2-SAT
。
考虑如何确定限制,树剖线段树反向记录每条路径对应在线段树上的点,即记录每条边被哪些路径包含,线段树上的叶子节点即为边。
对于一条树边,其被包含的路径编号即为它在线段树上的祖先和它的路径编号并集。
如果选一条路径上,那么它在线段树上的点的祖先和儿子的路径都不能选,即线段树上根到叶子的一条路径上的点的路径编号最多选一个。
考虑线段树上根前缀优化建图,套路了不讲。
时间复杂度 。
8.P7712 [Ynoi2077] hlcpq(黑)
有暴力, 建边,tarjan
求割点。
再考虑优化,拿出线段树优化建边过程,考虑到区间限制,扫描线加主席树即可。
然后发现,建虚点会使答案不对,故只构造结构而不建边。
回顾 tarjan
求割点的过程,树边递归完后执行 ;返租边执行 。
对于树边,每次在线段树上找没有更新 的节点,然后更新 即可。
对于返租边,求出边的 最小值即可。
时间复杂度均摊 。
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/18122004