
图论-LCA
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 2588 Spoj 10628. Count on a tree
主席树+LCA对于每个点,建一棵该点到根路径上的权值线段树,用主席树搞一搞,对于每个询问(a,b),记c是他们的LCA,d是c父亲,用siz[a]+siz[b]-siz[c]-siz[d]查找即可- -WA到吐血才发现自己lower_bound里面的cnt打成n了。。。QAQ#include<cstdio>#include<cmath>#include<iostream>#include<al原创 2016-08-25 17:25:16 · 302 阅读 · 0 评论 -
BZOJ 3991 [SDOI2015]寻宝游戏
set+dfs序+LCA题解:http://blog.youkuaiyun.com/regina8023/article/details/45502279显然(也就是说我不会严谨证明),最终答案一定是所有有宝物的点之间相连形成的树的边权和的两倍。而且不论从哪个点出发,最短路长度都一样,都是边权的两倍(因为无论从起点往哪里走,总是要回来的)。那我们就钦定DFS序最小的点为起点,然后发现只要沿着DFS递增的顺序走,原创 2016-10-21 23:37:40 · 586 阅读 · 0 评论 -
BZOJ 2125 最短路
树剖LCA+SPFA+tarjan找简单环静态仙人掌最短路没啥好说的,要分类讨论,细节要处理清楚…(我这个SB细节没弄好WA飞了) 膜:http://blog.youkuaiyun.com/popoqqq/article/details/43876907#include<cstdio>#include<queue>#include<cstring>#define cmin(u,v) (u)>(v)?(u原创 2016-10-15 11:00:14 · 415 阅读 · 0 评论 -
UOJ 150 [NOIP2015]运输计划
二分+树链剖分+差分要求最远的值最小,于是我们可以考虑二分答案。对于每一个二分出来的lim,我们只需要判断所有路径(指运输计划里面所有的路径)中长度大于lim的所有路径是否存在一条公共边,使得最长路径减去它可以小于等于lim(如果最长的可以,那么短的也肯定可以)那么怎么求这条边?我刚开始的想法是树剖+线段树,对每一条超过lim的路径上的边的都记+1,然后暴力枚举边来找公共边。但是这样是O(nlog3原创 2016-10-06 14:47:27 · 718 阅读 · 0 评论 -
BZOJ 4538 [Hnoi2016]网络
线段树上二分+链交+LCA这题做法大概有2种,我用的是第二种1.实际上一条链的贡献是这条链在树上的补集,于是树剖线段树维护树,每一个节点开一个堆维护最大贡献。 O(nlog3n)O(nlog^3n)2.假设对于一个询问x,二分出一个答案C,若所有≥C的链都经过了x,则显然最终答案<C,否则最终答案≥C。于是离线将所有链按权排序后,建立权值线段树,节点存储子节点的链交,直接在线段树上二分找答案即可,O原创 2016-12-06 10:37:39 · 685 阅读 · 0 评论