摘要: 传送门 需要把一条路径上除了终点外的所有数都 + 1, 比如,给路径 s - t 上的权值 + 1,可以先求 x = lca(s,t) 类似数列上差分的思路,可以给 s 和 f[t] 的权值 + 1,给 x 和 f[x] 的权值 - 1 最后统计以每个节点为根的子树的和,则每个节点的权值就是子树的权 阅读全文
posted @ 2017-05-04 21:04 zht467 阅读(126) 评论(0) 推荐(0)
摘要: 传送门 可以看出,三个点两两之间的lca会有一对相同,而另一个lca就是聚集点。 然后搞搞就可以求出距离了。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define MAXN 1000001 5 6 阅读全文
posted @ 2017-05-04 19:03 zht467 阅读(111) 评论(0) 推荐(0)
摘要: 传送门 水题。 直接倍增求lca。 x到y的距离为dis[x] + dis[y] - 2 * dis[lca(x, y)] ——代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define MAXN 20002 阅读全文
posted @ 2017-05-04 17:13 zht467 阅读(135) 评论(0) 推荐(0)
摘要: 传送门 树上的dp,从底向上dp就行。 设dp[u][0]表示不选节点 u 的最大值,dp[u][1]表示选节点 u 的最大值。 则状态转移方程为: dp[u][0] = ∑max(dp[v][1], dp[v][0]) dp[u][1] = ∑dp[v][0] + val[u] (节点v是节点u的 阅读全文
posted @ 2017-05-04 16:12 zht467 阅读(183) 评论(0) 推荐(0)
摘要: 传送门 因为异或满足结合律和交换律。 a^b^b=a 所以这个题直接求根节点到每个点路径上的异或值。 对于每组询问直接输出根到两个点的异或值的异或的值。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 200001 4 5 u 阅读全文
posted @ 2017-05-04 15:39 zht467 阅读(182) 评论(0) 推荐(0)
摘要: 部分转载自:http://blog.csdn.net/u013076044/article/details/45915745 定义 找到一个点,其所有子树中最大的子树节点数最少,那么这个点就是整棵树的重心。 在树的总点数为偶数时,可能会有两个重心。 性质 性质 1 :树中所有点到某个点的距离和中,到 阅读全文
posted @ 2017-05-04 15:14 zht467 阅读(180) 评论(0) 推荐(0)
摘要: 传送门 假设数据再大些,我这就是正解,然而题解里总是各种水过。 两边dfs,一遍求重心,一遍统计距离。 ——代码 1 #include <cstdio> 2 #include <cstring> 3 #define MAXN 1001 4 5 using namespace std; 6 7 int 阅读全文
posted @ 2017-05-04 15:02 zht467 阅读(159) 评论(0) 推荐(0)
摘要: 清北澡堂七日游 %%%hzh hzh大佬,不知为何一点印象都没有。 hzh大佬在水群 只记得hzh讲了些图和树,还剩下一个基友环树没讲,说这玩意没什么卵用,就是用来增加代码量的。 %%%lzh dalao发音很有意思。 受欢迎的liu 时间cuo 好像也是讲的图论,lca之类的,树剖求lca,二分图 阅读全文
posted @ 2017-05-04 14:19 zht467 阅读(152) 评论(0) 推荐(1)