
树链剖分
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Traffic Network in Numazu HDU - 6393
http://acm.hdu.edu.cn/status.php?user=sunyutian&pid=6393原图是一个n条边的连通图 即一个树图之上又加了一条边 查询两点间的距离并查集判出多余的边 用剩下的n-1条边建树 对每次查询看两点之间的树上距离 以及经过多余边的距离 查距离用线段树或者树链剖分都可以#include <cstdio>#include ...原创 2018-08-14 16:19:10 · 277 阅读 · 0 评论 -
List wants to travel HDU - 5893
http://acm.hdu.edu.cn/showproblem.php?pid=5893和hysbz一模一样 只是这道题给的是边权 边界处理比较麻烦 要小心一点#include <bits/stdc++.h>using namespace std;struct node0{ int u; int v; int w;};struct n...原创 2018-08-24 19:45:17 · 184 阅读 · 0 评论 -
Jiu Yuan Wants to Eat 计蒜客
https://nanti.jisuanke.com/t/31714前两种是基本操作 第三种取反操作乍一看觉得要单独维护一个标记 于是考虑lazy标记的次序 后来发现一步转换a'=(2^64-1)-a 就相当于两步操作 先区间乘-1 再对区间+(2^64-1) 然后就是个模板题比赛时没时间写 最后四十分钟看到这个题 最后不到半小时有思路 明知道自己可以做出来但已经没有时间 明知道写不完...原创 2018-09-15 19:39:34 · 357 阅读 · 2 评论 -
树上路径 牛客网
https://www.nowcoder.com/acm/contest/180/E树剖 前两种是基本更新操作 第三种查询操作需要稍微转换一下题目要求的式子 a1*(a2+a3+...+an)+a2*(a3+a3+...+an)+...+an-1*an 显然这是个上三角原式=(a1*(a1+a2+a3+...+an)+a2*(a1+a2+a3+...+an)+...+an*(a1+a2...原创 2018-09-10 10:44:58 · 281 阅读 · 0 评论 -
Imperial roads Gym - 101889I
http://codeforces.com/gym/101889/attachments给一个图 q次询问 在某条边必选的条件下求一个最小生成树先求个生成树 因为每次只固定一条边 可以求个lca 看替换形成的圈上的哪条边最合适对一个最小生成树后 如果用两点之间的非树边替换一条树边构成新的生成树 肯定不是最优的(排除相等) 所以在只替换一条边的情况下只考虑圈内边即可 #inclu...原创 2018-10-18 13:27:53 · 194 阅读 · 0 评论 -
Game HDU - 5242
http://acm.hdu.edu.cn/showproblem.php?pid=5242要活用树链剖分 不能只会更新查询。。把所有重链找出来排序 贪心的取前k大 因为所有的重链是互不相交的且以叶节点为尾 正好拼成一棵有k个叶子节点的子树 即为所求 但注意这里比较依据不再是子树的节点数量 而是子链权值 #include <cstdio>#include <c...原创 2018-10-19 14:19:29 · 257 阅读 · 0 评论 -
Vasya and a Tree CodeForces - 1076E
http://codeforces.com/contest/1076/problem/E这场竟然是acm赛制 本以为先做e能多捞几分 结果罚时爆炸还差点翻车。。m次修改 v k x代表将v节点之下k层的节点全都加x 最后统一查询 即输出每个节点的值因为修改过程无查询 考虑离线做法 因为是按层更新 一开始考虑维护bfs序 但k不是一个小常数 并且也无法对层数差分 只能换思路很多数据结...原创 2018-11-13 09:46:51 · 509 阅读 · 0 评论 -
Laminar Family Gym - 101630L
http://codeforces.com/gym/101630/attachments按链长度降序排序 一条条的向树上着色 每次着色之前先看当前链上是不是同一种颜色 线段树维护一下 是的话就更新 不是一种颜色 那就说明有冲突 #include <bits/stdc++.h>using namespace std;typedef pair<int,int>...原创 2018-11-22 08:49:05 · 245 阅读 · 0 评论 -
旅行计划 51Nod - 1273
https://www.51nod.com/Challenge/Problem.html#!#problemId=1273 最长的那条链肯定是题中第一次要走的那条路经 第二次要走的就是拿掉这条链后第二长的链按子树中节点的最大深度来划分轻重链 然后求一下每条链的长度 排个序即可辣鸡51nod 第一个样例WA到死 打开发现是 "1 0\n 0" 这他妈是个鬼样例啊 需要特判 ...原创 2018-12-13 14:32:17 · 300 阅读 · 0 评论 -
Aragorn's Story HDU - 3966 + Query on a tree SPOJ - QTREE
树链剖分模板题点击打开链接基于点权 链修改单点查询点击打开链接基于边权 单点修改链查询#include <bits/stdc++.h>using namespace std;const int maxn=5e4+10;struct node{ int v,next;};node edge[2*maxn];int tree[4*maxn];i...原创 2018-01-28 11:40:58 · 232 阅读 · 0 评论 -
Relief grain HDU - 5029
点击打开链接题目要求在u到v这条链上加入w这个元素 并统计每个点上最多的元素是谁 只要在链首加入一个w 链尾加入一个-w即可 有点离线处理的意思树链剖分中 一条链会被划分成logn条小链 这些小链在树剖版dfs序中是连续的 所以要分段更新#include <bits/stdc++.h>using namespace std;struct node1{ in...原创 2018-04-09 16:12:29 · 150 阅读 · 0 评论 -
旅行 HYSBZ - 3531
https://www.lydsy.com/JudgeOnline/problem.php?id=3531树剖加主席树问一条链上某种颜色的权值和或最大值可以对每种颜色建立一棵线段树 维护树剖之后的dfs序列 每次在对应颜色的线段树上操作 但是这样空间复杂度无法承受 而用主席树的话 树图上的每一个节点都只需新开辟一条链这个方法同样可以简化(不用维护树剖)到查询一棵子树上某种颜色的数量...原创 2018-08-11 21:06:58 · 209 阅读 · 0 评论 -
The LCIS on the Tree HDU - 4718
http://acm.hdu.edu.cn/showproblem.php?pid=4718链上LCIS 用区间合并解决 线段树每次查询都带回该区间内的左值 右值 左连续段 右连续段 最大连续段 然后和该链上的上一次查询合并 这里直接当做线段树区间合并的法子写的 uv两点顺着两条链向上爬 会师后特殊处理即可7000+的代码 debug一天。。 爬链时开了很多没用的变量 反正多了没错。。...原创 2018-08-09 21:20:45 · 324 阅读 · 0 评论 -
Yaoge’s maximum profit HDU - 5052
http://acm.hdu.edu.cn/showproblem.php?pid=5052和之前做得求链上连续段数很像 但是这道题难在要考虑方向问题 写起来很恶心从u和v两边往上爬 在某一边每爬一小段(线段树上一个区间 需要区分方向) 就看这一小段上的利润最大值 再和两边已经走过部分的最大最小值做差取最优#include <bits/stdc++.h>using na...原创 2018-08-08 10:42:51 · 216 阅读 · 0 评论 -
Trucks UVA - 12655
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4384题目要求任意两点之间所有路径的中 权值最小的边最大的那条路上的最小边权值是多大没想到求个生成树就可以 暂时还不太理解 留坑..求完最大生成树 然后普通的链上最值查询...原创 2018-08-07 21:46:00 · 167 阅读 · 0 评论 -
树上操作 HYSBZ - 4034
https://www.lydsy.com/JudgeOnline/problem.php?id=4034在树链剖分后形成的dfs序 和普通的dfs序性质一样 一颗子树在dfs序列中仍然是连续的 因为树剖之后虽然先走重链 但还是要走完当前子树后才会递归返回 然后进入其他子树#include <bits/stdc++.h>using namespace std;#defin...原创 2018-08-07 18:38:11 · 247 阅读 · 0 评论 -
染色 HYSBZ - 2243
https://www.lydsy.com/JudgeOnline/problem.php?id=2243树链剖分加区间合并 每个节点维护最左边和最右边的颜色以及当前区间的总段数 最难处理的地方在于一条链会被剖分成很多小段 需要将衔接部分处理好#include <bits/stdc++.h>using namespace std;struct node1{ i...原创 2018-08-07 10:17:22 · 240 阅读 · 0 评论 -
Tree POJ - 3237
http://poj.org/problem?id=3237树链剖分区间更新模板#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define N 0x3f3f3f3fstruct node1{ int u; ...原创 2018-08-02 10:26:21 · 200 阅读 · 0 评论 -
Network POJ - 3694
点击打开链接q次询问 每一次加一条边 问加完这条边之后还剩多少割边可以想到 对于一个无向图 缩完点之后就是一棵树 且树上的边就是原图中的割边对于每一次加边操作 如果两点不在一个连通分量之中 就会把两点之间的所有割边全部去掉 形成有一个新的连通分量 相当于修改新树图中的一条链 这个过程用树链剖分维护一下就好了#include <cstdio>#include <...原创 2018-05-31 19:44:54 · 336 阅读 · 0 评论 -
Blood Cousins CodeForces - 208E
http://codeforces.com/problemset/problem/208/E问一个节点v有多少p兄弟 就等于看v的p祖先有多少p孩子找p祖先就倍增或者树剖一下 然后就是某一层的节点中属于某棵子树的点有多少 用dfs序一判即可#include <bits/stdc++.h>using namespace std;#define pb push_ba...原创 2019-03-23 19:28:44 · 197 阅读 · 0 评论