摘要:
XI.[USACO12NOV]Balanced Trees G 与上题类似,我们仍然需要分成$FR$路径和$TO$路径两部分考虑。默认将根归为$FR$路径中考虑。 首先是判断怎样搞才是合法的。关于这个,我们可以用一个pair<int,int>来记录全部匹配完后,剩余的)与(的数量,其中first表示 阅读全文
摘要:
X.[COCI2019] Transport 常规淀粉质的题也可以出的非常毒瘤…… 依旧考虑淀粉质。因为这里的路径是有向路径,所以会在分治中心被截成两半,一半从节点到根,记作$FR$路径;而另一半从根到节点,记作$TO$路径。显然,一条$FR$路径只能与来自不同子树的一条$TO$路径拼接,并且这两条 阅读全文
摘要:
IX.[BJOI2017]树的难题 debug三天,精神崩溃 论一行if(vis[v[x][r].second]){r++;continue;}忘记加上后所有代码全都莫名其妙TLE且查不出锅的痛苦 首先,我们考虑常规淀粉质。 我们考虑一条路径,它会被(淀粉质的分治根)截成两段。如果我们对于分治树中的 阅读全文
摘要:
VIII.[ZJOI2015]幻想乡战略游戏 题意:求一个树的带权重心,带修改。 现在首位的题解的方法太恶心了,这里介绍我自己的理解。 假设重心为$x$,我们有它的代价为: \(\sum\limits_{i=1}^{n}\operatorname{dis}(i,x)\times val_i\) 其中 阅读全文
摘要:
VII.[HNOI2015]开店 首先,第一种方法便是动态点分治。 我们先考虑忽略年龄限制的情形。 我们考虑正常求一个点到另一个点的距离应该怎么求—— 一般来说,我们会用$dis(i,j)=dep_i+dep_j-2*dep_{lca(i,j)}$对吧? 这个东西相当于将路径划分成两个部分,其中每个 阅读全文
摘要:
VI.【模板】点分树 | 震波 我们之前讲过一个叫做淀粉徐的东西,但就跟dfs序一样,把树压成序列,总会损失一些信息。有没有方法能够完整地维护出来淀粉质的信息呢? 还真有。 我们看到在对于某个点淀粉质时,它的所有子树,都会拥有一个下层的分治节点。 我们看到淀粉质的代码: void solve(int 阅读全文
摘要:
V.[FJOI2014]最短路径树问题 这题已经在我的收藏夹里吃了大半年的灰了……主要是因为他们有人把这题归到了树形DP里面,然后我就傻乎乎地把它收藏了…… 首先,假设我们已经求出了这个“最短路径树”,剩下的就是点分治的板子了。 而这个“最短路径树”,首先可以通过Dijkstra跑出最短路径DAG, 阅读全文
摘要:
IV.树上游戏 考虑淀粉质。 对于一棵分治树,我们考虑对树中所有LCA为根节点的路径计算贡献。 我们对于根节点一棵子树一棵子树地处理。设$cnt_i$表示子树外有多少条以根节点为一个端点的路径上有颜色\(i\)。则我们当前子树中的一个点的贡献可以分作两部分:子树外的部分(即$\sum cnt_i$) 阅读全文
摘要:
III.BZOJ3784: 树上的路径 思路1: 淀粉质。用priority_queue维护前$m$长的路径的长度。用multiset维护点分治时,之前所有子树的路径长度,然后对于新子树中的每一条路径,在multiset中从大往小枚举另一半路径拼一起并尝试加入优先队列。如果加入失败,那么对于这个点, 阅读全文
摘要:
II.BZOJ4675: 点对游戏 (因为C++11的缘故在BZOJ上交会CE) 思路: 我们首先使用淀粉质找出所有长度为“幸运数”的路径数量,设为$tot$。然后,设$f(x)$表示$x$个点间所有的路径数量(即为$\dfrac{x(x-1)}{2}\(),则答案即为\)\dfrac{tot\ti 阅读全文