Skip to content

把这些转为markdown源码给我:

判定点在回路内的技巧

该技巧的核心思想是将以下两个问题互化:
	1.判定一个点是否与外界联通
	2.判定一个点是否被回路围住
怎么转换呢?
	一个点可以四联通等价于回路可以八联通
	类似的我们可以转换问题
那么以下的两个技巧就是针对这两个问题的:
	1.直接用并查集维护联通性,可以处理问题1
	2.引一条射线,利用扩展域并查集,可以处理问题2
刷题:
CF1920F2 Smooth Sailing
	技巧1做法:
		原题要求回路四联通,那么就是要求移动点八联通,我们可以维护中心岛屿到某个边界点的联通性
		可以预处理出每个点的点权,那么问题转化成去掉权值<=x的点,使中心岛不与目标点联通
		直接整体二分结合可撤销并查集即可
	技巧2做法:
		法一:
			能围住岛屿等价于出现了并查集中的0类点和1类点联通
			直接整体二分即可
		法二:
			发现这个是最值最短路,可以直接kruskal重构树
ABC361G Go Territory
	技巧1做法:
		直接连会炸掉,但发现有用的只有只有黑点之间的线段,所以可以只保留这些线段进行连边即可
		至于如何连边,可以双指针维护相邻相交线段,也可以把黑点上下左右的白点拿出来去试着往旁边的白点连
	技巧2做法:
		发现这等价于询问每个黑点上面的白点是否被回路包围
		考虑到某个并查集只有在覆盖了射线的情况下才会改变连向,所以直接线段树分治
		先对横坐标线段树分治,递归到叶子以后再对纵坐标做线段树分治 即可
		https://atcoder.jp/contests/abc361/submissions/55356486
该技巧的核心思想是将以下两个问题互化:
	1.判定一个点是否与外界联通
	2.判定一个点是否被回路围住
怎么转换呢?
	一个点可以四联通等价于回路可以八联通
	类似的我们可以转换问题
那么以下的两个技巧就是针对这两个问题的:
	1.直接用并查集维护联通性,可以处理问题1
	2.引一条射线,利用扩展域并查集,可以处理问题2
刷题:
CF1920F2 Smooth Sailing
	技巧1做法:
		原题要求回路四联通,那么就是要求移动点八联通,我们可以维护中心岛屿到某个边界点的联通性
		可以预处理出每个点的点权,那么问题转化成去掉权值<=x的点,使中心岛不与目标点联通
		直接整体二分结合可撤销并查集即可
	技巧2做法:
		法一:
			能围住岛屿等价于出现了并查集中的0类点和1类点联通
			直接整体二分即可
		法二:
			发现这个是最值最短路,可以直接kruskal重构树
ABC361G Go Territory
	技巧1做法:
		直接连会炸掉,但发现有用的只有只有黑点之间的线段,所以可以只保留这些线段进行连边即可
		至于如何连边,可以双指针维护相邻相交线段,也可以把黑点上下左右的白点拿出来去试着往旁边的白点连
	技巧2做法:
		发现这等价于询问每个黑点上面的白点是否被回路包围
		考虑到某个并查集只有在覆盖了射线的情况下才会改变连向,所以直接线段树分治
		先对横坐标线段树分治,递归到叶子以后再对纵坐标做线段树分治 即可
		https://atcoder.jp/contests/abc361/submissions/55356486

Released under the MIT License.