点分治
Freopen
这个作者很懒,什么都没留下…
展开
-
daklqw 的 T3(点分树上数据结构优化DP)
设fxf_xfx为从第xxx个事件开始做最多的收益。那么这个dpdpdp是按照时间线从后往前的dpdpdp,求每个点的做起点的答案可以简单的在每个点初始放一个A=K=P=0A=K=P=0A=K=P=0的时间即可解决。对于两个事件之间的转移,我们只需要这两个事件在树上的距离s1s1s1,最小多走多少距离可以到达一个奖励边刷分并且走回这两个点的最短路径s2s2s2,(贪心来说,如果我们绕路,那么一定是在一个最近的奖励边上面刷分)最短路径上本来有多少奖励边ccc。那么如果这两个事件之间可以让我们移动原创 2020-07-12 17:43:26 · 595 阅读 · 1 评论 -
Suurballe's Algorithm(计算点s到每个点的两条边不相交路径的和的最小值,模拟费用流)
题意如题。有向边,边权非负。一个简单的暴力是对于每个点为汇点跑流量为222的最小费用流。不知道卡不卡SPFASPFASPFA。(费用流反向边权值是负的。)当然你可以JohnsonJohnsonJohnson算法跑有理有据的dijkstradijkstradijkstra费用流,O(n2logn)O(n^2\log n)O(n2logn)但是JohnsonJohnsonJohnson算法本身就是该算法的一个特殊情况而已。tarjantarjantarjan和suurballesuurballes原创 2020-05-11 15:39:42 · 1824 阅读 · 1 评论 -
Codechef Union on Tree(点分树,虚树)
建虚树。然后在虚树上求出每个点最多可以往外拓展多少距离(意思就是可以由其他点拓展到这个点之后继续拓展)。那么按照这个定义我们可以得到:一个点如果被覆盖,那么一定可以覆盖他的点在虚树上是一个联通块。因为树上连通块满足点数-边数=1。那么我们把每个点可以覆盖的点数相加,再枚举每条边,减去边的两个点都能覆盖的点数,那么考虑一个被覆盖的点,能覆盖他的那个联通块会刚好计算了它一次。那么这样就...原创 2020-05-06 12:47:36 · 339 阅读 · 0 评论 -
「WC2018」即时战略(LCT/动态点分治)
题目其实是一道很清新的动态点分练习题。AC Code\rm AC \ CodeAC Code#include "rts.h"#include <bits/stdc++.h>#define rep(i, j, k) for (int i = (j), LIM = (k); i <= LIM; i++)#define per(i, j, k) for ...原创 2020-01-17 16:13:59 · 368 阅读 · 0 评论 -
20191212 C 简单点分治
给定一棵有n个节点的无根树,树上的每个点有一个非负整数点权。定义一条路径的价值为路径上的点权和-路径上的点权最大值。 给定参数PPP,我们想知道,有多少不同的树上简单路径,满足它的价值恰好是PPP的倍数。 注意:单点算作一条路径;u!=vu!=vu!=v时,(u,v)(u,v)(u,v)和(v,u)(v,u)(v,u)只算一次。n<=1e5,P<=1e7n<=1e5 , P&l...原创 2019-12-12 21:43:47 · 181 阅读 · 0 评论 -
「SCOI2016」幸运数字(在线点分树+线性基)
题目恕我直言,这个题用倍增的都是xx抄WXH代码的在线点分树,写的真是好啊。但是线性基要用__builtin_clzll优化,快3倍之后才可以和倍增理论上复杂度优越。。。。。。。以后我就这么写点分了。#include<bits/stdc++.h>#define maxn 20005#define inf 0x3f3f3f3f#define LL long long#...原创 2019-10-25 16:24:49 · 145 阅读 · 0 评论