圆方树
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
-
【SDOI2018】战略游戏(圆方树)(虚树)(树上差分)
传送门 题解: 圆方树的性质不再赘述,两个圆点路径上的圆点就是原图中两点之间的必经点。 那么我们要统计的就是询问的点构成的虚树上有多少个圆点。 并不需要把虚树建出来,直接利用dfs序树上差分即可。 跑得还挺快的。 代码: #include<bits/stdc++.h> #define ll long long #define re register #define cs const...原创 2019-11-15 11:50:01 · 147 阅读 · 0 评论 -
2019.03.07【APIO2018】【洛谷P4630】【BZOJ5463】铁人两项(圆方树)(树形DP)
洛谷传送门 BZOJ传送门 解析: 对所有点双建立圆方树,设圆点权值为−1-1−1,方点权值为点双大小。那么原题转化为求树上所有圆点两两路径的权值和,直接上树形DP。 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #define re register #define gc get_cha...原创 2019-03-08 21:53:16 · 163 阅读 · 0 评论 -
2019.04.01【BZOJ2125】【洛谷P5326】【模板】静态仙人掌(圆方树)
BZOJ传送门 洛谷传送门 补档计划无题解 代码: #include<bits/stdc++.h> #define ll long long #define re register #define gc get_char #define cs const namespace IO{ inline char get_char(){ static cs int Rlen=1&l...原创 2019-04-01 19:53:17 · 234 阅读 · 1 评论 -
2019.04.01【校内模拟】Cac(圆方树)(DFS序)
传送门 解析: 仙人掌上路径问题考虑转换为圆方树上的问题。 将所有点双和割边改造为方点会让这道题好写一点。 现在考虑一条圆方树上的路径。 考虑对所有方点维护加法标记,表示它的所有亲儿子的权值需要加上多少。 加法标记对圆点无效。 显然当路径LCA是方点的时候我们需要特殊处理一个圆点,拿一个桶来记录单独加了多少,每次修改只会有O(1)O(1)O(1)次这种操作,不会影响复杂度。 对于询问我们在桶里面...原创 2019-04-01 21:37:19 · 219 阅读 · 0 评论 -
2019.04.02【CodeForces487】E. Tourists(圆方树)(树链剖分)(线段树)
传送门 解析: 我们发现题目中简单路径这个条件其实就是将点双缩点后,重构树上路径经过的所有点双里面的点。 于是构建广义圆方树。这道题还是为了方便处理,将所有割边改造为方点。 按照套路,所有方点维护亲儿子的信息,直接开一个multiset就行了。 显然我们需要询问路径上最小值,上树剖和线段树维护,然后在询问的时候特判路径LCA为方点的情况。 代码有点长,但是没什么细节,很好写。 代码: #inc...原创 2019-04-02 09:57:00 · 178 阅读 · 0 评论 -
2019.04.02【洛谷P4320】道路相遇(圆方树)
传送门 解析: 换根支配树?不要想了,你要是明白支配怎么建的你就知道这玩意不存在的 显然在无向图上除了起点终点以外的必经点就是割点。 显然我们就是询问路径上割点个数。 建立广义圆方树,显然路径上的所有圆点就是割点。 相当于询问圆方树路径上圆点个数。 这个嘛。。。怎么开心怎么玩是吧。 代码: #include<bits/stdc++.h> #define ll long long #...原创 2019-04-02 10:47:40 · 174 阅读 · 0 评论