![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
虚树
stargazer.
夜を穿つの
展开
-
【BZOJ3611】【HeOI2014】—大工程(虚树+dp)
传送门 首先肯定建出虚树 考虑三种答案如何分别统计 路径长度和显然示是对于每条边考虑一下上下有多少个点,乘一下就可以了 最大值显然就是树的直径 最小值可以考虑树形dpdpdp,考虑mn[i]mn[i]mn[i]表示iii到其子树中最近的距离 显然可以类似直径树形dpdpdp解决 #include<bits/stdc++.h> using namespace std; #define l...原创 2019-03-12 11:00:36 · 141 阅读 · 0 评论 -
【BZOJ3572】【HNOI2014】—世界树(虚树+倍增+dp)
传送门 考虑将虚树建出来 我们先对于每个虚树的点点求出被哪个地方支配 然后考虑对每一条边考虑 如果两边点被同一点支配就不用管了 否则考虑倍增找到中点 分别计算一下贡献 可以处理一个remremrem表示子树中除去已经被计算过的剩下的sizsizsiz 也就可以方便统计那些没有关键点的子树了 具体可以看代码 #include<bits/stdc++.h> using namespace ...原创 2019-04-10 21:24:03 · 139 阅读 · 0 评论 -
【BZOJ3879】—SvT(后缀自动机+虚树/后缀自动机+单调栈)
传送门 后缀数组终于跑过了SamSamSam了 后缀自动机上虚树是显然的 后缀数组就按rkrkrk排序后考虑每个位置的贡献,显然就是左右都比他大的时候 单调栈维护一下就是了 后缀数组+单调栈 #include<bits/stdc++.h> using namespace std; const int RLEN=1<<20|1; inline char gc(){ ...原创 2019-07-18 15:44:15 · 165 阅读 · 0 评论 -
【SDOI2019】—世界地图(虚树+Kruscal)
传送门 直接每次暴力做是qmnlogqmnlogqmnlog的 考虑如果维护了地图前后缀的最小生成树 每次就相当于加入了(m,1)(m,1)(m,1)中间的nnn条边 加边就是找2点间最大值删去 考虑对最小生成树建虚树 对于前缀,对第一列的点建虚树,边权为链上最大值 后缀类似对最后一列这样做 这样每次合并就只需要对O(n)O(n)O(n)个点做最小生成树就可以了 复杂度O(qnlogn+mnlog...原创 2019-09-19 13:15:04 · 201 阅读 · 0 评论 -
【Codeforces 809 E】—Surprise me!(欧拉函数+莫比乌斯反演+虚树)
传送门 考虑有ϕ(ij)=ϕ(i)∗ϕ(j)∗gcd(i,j)ϕ(gcd(i,j))\phi(ij)=\phi(i)*\phi(j)*\frac{gcd(i,j)}{\phi(gcd(i,j))}ϕ(ij)=ϕ(i)∗ϕ(j)∗ϕ(gcd(i,j))gcd(i,j) 然后就可以枚举gcdgcdgcd乱莫反了 推出来最后就是 ans=∑hT(h)∑i,jnhϕ(hi)ϕ(hj)dis(p[ih]...原创 2019-10-07 16:52:00 · 184 阅读 · 0 评论