把这些转为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