摘要: 我们都做过一道题(?)货币兑换,是用cdq分治来解决不单调的斜率优化 现在它放到了树上.. 总之先写下来dp方程,$f[i]=min\{f[j]+(dis[i]-dis[j])*p[i]+q[i]\} ,j是i的祖先,dis[i]-dis[j]<=l[i]$ ,其中dis[i]表示1号点到i号点的距 阅读全文
posted @ 2018-09-24 18:32 Ressed 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 可以把翻倍的操作看作是一个查询和修改(增加刚查询得来的值)的符合操作,然后做cdq就行了 阅读全文
posted @ 2018-09-24 18:18 Ressed 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 经过部分分的提示,我们可以把一条路径切成s到lca 和lca到t的链 这样就分为向上的链和向下的链,我们分开考虑: 向上:如果某一个链i可以对点x产生贡献,那么有deep[x]+w[x]=deep[S[i]],而且S[i]和lca[i]都在x的子树中 向下:如果某一个链i可以对点x产生贡献,那么有d 阅读全文
posted @ 2018-09-24 18:04 Ressed 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 首先floyd求出每两点间的距离(注意自己到自己的距离要设成0) 然后就是dp了 一开始照着Lifeguards的样子,钦定了一下i这个点一定要选,然后发现复杂度不对,还想了好长时间优化 然后一翻题解,直接两种状态选或不选分开算O(1)转移多好(所以年轻人不要整天满脑子都是钦定钦定的) 但为什么Li 阅读全文
posted @ 2018-09-24 17:47 Ressed 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 由范围可以想到状压dp 两个点(再加上原点)是可以确定一个抛物线的,除非它们解出来a>=0,在本题中是不合法的 这样的话,我们可以预处理出由任意两个点确定的抛物线所经过的所有的点(要特别规定一下自己和自己确定的抛物线只经过自己) 然后设状态s表示目前已经有哪些点被击中了,然后我们钦定这次就要打那个最 阅读全文
posted @ 2018-09-24 17:37 Ressed 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 可以直观地想到用优先队列来做,但数据范围是O(n)的 然后我们发现,因为我们每次挑出来的蚯蚓是单调的,所以把每个切成两段后,那两段也是对应单调的 也就是说,算上最一开始的蚯蚓,我们一共维护三个队列,三个分别单调,每次取出来最大的那个队头就行了 阅读全文
posted @ 2018-09-24 17:31 Ressed 阅读(153) 评论(0) 推荐(0) 编辑