图转树+LCA
题意
给一个n*n的方格图,’#’表示障碍,’.’表示空地,问点(x1,y1)到点(x2,y2)能够支持平行移动过去的最大方块的大小(要求方块为奇数,移动过程中方块不能越界或者碰到障碍)。
- n<=1000
- q<=300000
题解
- 先对每个空格求出以它为中心可以产生的最大边长d的正方形,然后把每个点坐标(i,j)看成一个新点i×n+j,每个点的权值是d[i][j].
- 把所有点按照权值从大到小排序。考虑把点生成树,而且树从底向上权值依次减小,每个点找它上下左右四个方向的连通块(已经加进树中)的最小权值点,把这个点的父亲赋为当前点,这样子询问就变成了求树上的LCA,判断点的连通性用并查集即可。
代码
|
|