随笔分类 -  树 - DFS序

摘要:比较好的一道数据结构题. 对于 $i$,我们希望求出所有经过 $i$ 号点的路径所构成的树链之并. 考虑一个求解树链的并的经典做法就是 $\sum_{i=1}^{n} dep[i]-\sum_{i=2}^{n} dep[LCA(i,i-1)]$. 这里要求所有点都要按照 $dfs$ 序排好. 那么这 阅读全文
posted @ 2020-08-04 22:25 EM-LGH 阅读(190) 评论(0) 推荐(0)
摘要:这道题有 3 个操作: 1. 换根 2. 求 LCA 3. 子树修改/子树求和. 对于第一个操作,直接换根就行. 对于第二个操作,分这几种情况讨论:$x,y$ 都在以 1 为根,$rt$ 的子树中,$x,y$ 其中 1 个在子树中,$x,y$ 都不在子树中. 对于都在子树中的情况,答案即为 $lca 阅读全文
posted @ 2020-07-13 09:20 EM-LGH 阅读(154) 评论(0) 推荐(0)
摘要:往届学长的一场比赛. 总结:三道水题 haha! Task 1 省选 jloi.cpp/in/out 给你一个字符串,你每次只能删除一个回文串,问你最少需要几步将字符串删完,或输出无解. 题解:显然,答案最多为 2,而如果这个串本身就不是回文串答案就是 1,所以难点就是判断无解的情况. 手画几组发现 阅读全文
posted @ 2020-06-16 14:20 EM-LGH 阅读(154) 评论(0) 推荐(0)
摘要:没调完呀,感觉代码能力还是有待提高...... 写代码一定要讲究结构 + 逻辑性. 如果结构或者逻辑性不好的话是非常非常遭罪的 QAQ...... upd:好像调了 5 分钟就过了 这个问题等价于求:$x$ 能到达一个点集, $y$ 也能到达一个点集,这两个点集是否有交集 ? 由于是否到达只有边权最 阅读全文
posted @ 2020-06-08 17:26 EM-LGH 阅读(159) 评论(0) 推荐(0)
摘要:手完一下发现对于两个点求 LCA 来说,最优策略是对于 DFS 序相近的两个点去求. 所以把所有点按照 DFS 序排序,然后相邻两个依次求一下就行了. code: #include <bits/stdc++.h> #define ll long long #define N 100007 #defi 阅读全文
posted @ 2020-06-03 15:48 EM-LGH 阅读(151) 评论(0) 推荐(0)
摘要:思路自然的码农题. 显然分类讨论一下编号在 $[l,r]$ 的点与 $p$ 的子树关系. 如果都在 $p$ 的子树内就是个区间 $lca$. 否则,就二分第一个满足 $p$ 的祖先且子树内部没有 $[l,r]$ 之间的点. 二分验证的话要用主席树. code: #include <cstring> 阅读全文
posted @ 2020-02-13 15:42 EM-LGH 阅读(158) 评论(0) 推荐(0)
摘要:对与每一个时刻用主席树维护一下 DFS 序即可. LCA 的话树剖求解比较快. code: #include <cstdio> #include <string> #include <cstring> #include <algorithm> #define N 200006 using names 阅读全文
posted @ 2019-12-26 09:35 EM-LGH 阅读(124) 评论(0) 推荐(0)
摘要:明明可以用二维数点来做啊,网上为什么都是树剖+线段树呢 ? code: #include <cstdio> #include <cstring> #include <algorithm> #define N 100006 #define inf 1000000 #define ll long lon 阅读全文
posted @ 2019-12-24 18:55 EM-LGH 阅读(214) 评论(0) 推荐(0)
摘要:以前一直以为这道题很恶心,事实证明还好,好多地方脑残写丑了. code: #include <cstdio> #include <string> #include <cstring> #include <algorithm> #define N 50003 using namespace std; 阅读全文
posted @ 2019-12-21 16:00 EM-LGH 阅读(207) 评论(0) 推荐(0)
摘要:题意:给定一颗树,有 $m$ 次操作. 操作 0 :向集合 $S$ 中加入一条路径 $(p,q)$,权值为 $v$ 操作 1 :给定一个点集 $T$,求 $T$ 的并集与 $S$ 中路径含交集的权和.(就是如果路径 $i$ 与 $T$ 有交集,就产生 $v_{i}$ 的贡献) 数据范围:路径长度 $ 阅读全文
posted @ 2019-12-20 17:56 EM-LGH 阅读(266) 评论(0) 推荐(0)
摘要:将要查询的信息放到 dfs 序上并用树状数组查一个前缀和即可. 阅读全文
posted @ 2019-09-28 13:14 EM-LGH 阅读(179) 评论(0) 推荐(0)
摘要:发现对于任意一条边,起决定性作用的是节点编号更大的点. 于是,对于每一条边,按照节点编号较大值作为边权,按照最小生成树的方式插入即可. 最后用线段树维护 dfs 序做一个区间查询即可. Code: 阅读全文
posted @ 2019-09-23 10:18 EM-LGH 阅读(198) 评论(0) 推荐(0)
摘要:Description 给定一张包含N个单词的表,每个单词有个价值W。要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和。 给定一张包含N个单词的表,每个单词有个价值W。要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和。 Input 第一 阅读全文
posted @ 2019-08-30 12:52 EM-LGH 阅读(300) 评论(0) 推荐(1)
摘要:多组数据真tm恶心~ 把 $dfs$序和深度分别看作横纵坐标,然后用 $KDtree$ 数点就可以了~ 阅读全文
posted @ 2019-08-30 08:52 EM-LGH 阅读(181) 评论(0) 推荐(0)
摘要:Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机。打字机上只有28个按键,分别印有26个小写英文字母和'B'、'P'两个字母。经阿狸研究发现,这个打字机是这样工作的:l 输入小写字母,打字机的一个凹槽中会加入这个字母(这个字母加在凹槽的最后)。l 按一下印有'B'的 阅读全文
posted @ 2019-08-28 10:55 EM-LGH 阅读(143) 评论(0) 推荐(0)
摘要:链接:https://ac.nowcoder.com/acm/problem/16033来源:牛客网 有n个位置,标号为1到n的整数,m次操作,第i次操作放置一个弹球在b[i] xor c[i-1]处,并询问b[i] xor c[i-1]处弹球个数c[i]每次操作后,在x处的弹球被弹到a[x],规定 阅读全文
posted @ 2019-07-26 23:44 EM-LGH 阅读(228) 评论(0) 推荐(0)
摘要:Description 给您一颗树,每个节点有个初始值。 现在支持以下两种操作: 1. C i x(0<=x<2^31) 表示将i节点的值改为x。 2. Q i j x(0<=x<2^31) 表示询问i节点到j节点的路径上有多少个值为x的节点。 给您一颗树,每个节点有个初始值。 现在支持以下两种操作 阅读全文
posted @ 2019-06-13 14:28 EM-LGH 阅读(270) 评论(0) 推荐(0)
摘要:Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门。为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络。该网络的结构由N个路由器和N-1条高速光缆组成。 每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器, 阅读全文
posted @ 2019-05-31 13:34 EM-LGH 阅读(238) 评论(0) 推荐(0)
摘要:Code: 阅读全文
posted @ 2018-10-22 17:30 EM-LGH 阅读(208) 评论(0) 推荐(1)
摘要:题意:给定一棵树,每次可以拆掉一个树上度数为偶数的点,拆掉该点后,与该点所连的所有边都会被删掉。问,是否有一种删点顺序可以删掉所有的点。如果有,则输出任意一组解。数据范围:线性做法 O(n)O(n)O(n)不妨从叶子节点开始考虑问题。不难证明,距叶子节点最近... 阅读全文
posted @ 2018-10-09 18:55 EM-LGH 阅读(153) 评论(0) 推荐(0)