IOI2020集训队作业-10 (CF566C, CF700E, ARC092F)

这篇博客详细解析了IOI2020集训队的三道题目:CF566C Logistical Questions,CF700E Cool Slogans,ARC092F Two Faced Edges。针对每道题目,博主给出了解决方案和代码实现,涉及单峰函数、后缀自动机和强连通分量等算法知识。
摘要由CSDN通过智能技术生成

A - CF566C Logistical Questions

Sol

c o s t ( u , v ) = d i s ( u , v ) 3 2 cost(u,v)=dis(u,v)^{3\over 2} cost(u,v)=dis(u,v)23 d i s ( u , v ) ≥ 0 dis(u,v)\ge 0 dis(u,v)0的时候随 d i s ( u , v ) dis(u,v) dis(u,v)的递增而递增。所以,对于一条路径上的点 u 1 , u 2 ⋯ u k u_1,u_2\cdots u_k u1,u2uk和某一个固定的点 p p p h ( x ) = c o s t ( u x , p ) h(x) = cost(u_x,p) h(x)=cost(ux,p)是一个单峰函数。由于 w i ≥ 0 w_i \ge 0 wi0,所以 g ( x ) = ∑ p c o s t ( u x , p ) ⋅ w p g(x) = \sum_{p} cost(u_x,p)\cdot w_p g(x)=pcost(ux,p)wp也是单峰函数。

故而对于一个点,与它相邻的节点中至多只有一个节点比它优秀。点分治即可。

如何快速找出更优的那个节点:假设点分治过程中当前的根节点为 u u u,对 u u u的某一个子树 s u b x sub_x subx内的所有点 v v v,求出 h ( s u b x ) = ∑ c o s t ( u , v ) w v h(sub_x) = \sum cost(u,v)w_v h(subx)=cost(u,v)wv这个函数的导数 h ′ ( s u b x ) h'(sub_x) h(subx)。我们把决策点从 u u u移往 s u b x sub_x subx这棵子树的时候,答案的变化量就是 ∑ y ! = x h ′ ( s u b y ) − h ′ ( s u b x ) \sum _{y!=x} h'(sub_y) - h'(sub_x) y!=xh(sub<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值