省选模拟4 题解
A. 点点的圈圈
因为题中保证的特殊性质,容易发现圆之间的关系形成树形结构。
对于每棵子树,选择树的根或者累计所有子树的答案。
问题在于建图,容易发现这个可以用KDTree优化。
考虑将所有的点建在KDTree上。
用每个点的圆覆盖KDTree,当完全覆盖时直接塞入对应点的vector中。
之后DFS一遍KDTree,同时用一个set维护祖先链上所有的vector的集合。
set所表示的集合即能覆盖该点的所有的圆。
对于KDTree中每一个点,直接在set中查后继就可以找到他的父亲。
B. 点点的计算
根据大神的一番推导证明,可得原式$=lcm_{i=n-k+1}^n i$
考虑求出一个数组$b_{i,j}$,使得$\prod_{i=n-k+1}^{n} b_{n,i}=lcm_{i=n-k+1}^n i$,即每向左一步的增量。
问题在于如何通过$b_{n-1}$推出$b_n$。
直接令$b_{n}=b_{n-1}$,$b_{n,n}=n$,然后发现前面一些贡献出错了。
对于前面的$b_{n,i}$中含有$n$的一些质因子,统计重复了,所以不断乘逆元消掉。
这个玩意可以直接用一些栈来维护。
为了在线的回答询问,将这个数组通过可持久化线段树实现就好了。
容易发现取$lcm$对应着指数取$max$。
所以这个做法实际上是对这个指数最值的差分,实际上与$zkw$线段树维护区间最值的方法有异曲同工之妙。
C. 点点的最大流
最大流=最小割。
对于树上的情况,直接树剖维护最小值。
对于每个点只在一个简单环上,直接缩边双。
还是通过树剖的思想,只要维护出重链上经过这个简单环的答案放在树剖结构中。
对于其它答案,暴力通过线段树查询就好了。
然而这个做法特判太多了,有点恶心。
所以偷了大神$G$_$keng$的做法。
考虑环上的最小边一定被割,所以只要把最小边累加到其他边上。
直接在原树上割掉最短边,仍然维护树的结构。
因为要修改,所以用$lct$维护一下就好了。
数据确实有锅,哭了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 【译】我们最喜欢的2024年的 Visual Studio 新功能
· 个人数据保全计划:从印象笔记迁移到joplin
· Vue3.5常用特性整理
· 重拾 SSH:从基础到安全加固
· 并发编程 - 线程同步(一)