省选模拟4
A. 点点的圈圈
发现所有圆的包含关系形成了树的结构,而如果将树的形态确定,那么只需要简单dp就可以求出答案。
发现只需要在二维平面中找到被当前圆包含的圆,所以直接用KD_tree爆干就可以了。
然而考场上有点虚放到了最后打,最后15min才过样例,又不会造数据没法对拍,所以意料之中的爆炸了。
正解是神奇的扫描线,将每个圆分成上半圆和下半圆,那么只要确定上下半圆和横坐标就可以求出来对应的纵坐标。
那么对于一个圆,在它被加入的时候:查找下半圆对应的前趋,若这个前趋是一个下半圆那么是当前圆的父亲,否则是兄弟,手玩一下就可以明白。
B. 点点的计算
打个边可以发现是询问一段区间的$lcm$,考虑如何在线维护这个东西。
考虑由以$n-1$为右界的答案扩展到以$n$为右界的答案。显然我们只关注区间中每个质因子的最高次幂。
所以考虑将每个质因子的最高次幂差分掉,维护一段区间的乘积就好了,可以用主席树维护这个东西。
总的修改次数是$1-n$所含质因子总数,所以是$O(n*logn*loglogn)$。
C. 点点的最大流
看不懂题解自闭了,看懂了题解打不出来自闭了,然后去颓了G_keng大神的题解,然后就会做了。
由于是点仙人掌,所以可以考虑断环成链。发现最大流只与链上的最小值和环上两边的最小值之和有关,然后可以发现环上最小的边在不考虑链的情况下一定满流,所以可以将最小边的权值加到环上其他边,于是可以断掉这条边,然后只需要查询链上最小值就可以了。
然而这道题有修改操作,所以最小边会发生变化,所以需要动态删加边,使用LCT维护就可以了。