浅析NOIP中的图论【2】

3.LCA的综合运用

lca基础芝士

(1)树上差分

在序列中,我们定义其前缀和与差分序列,把区间的增减转化为左端点加1,右端点减1,根绝差分序列的前缀和是原序列这一原理,在树上也可以进行类似的简化,其中“区间操作”对应“路径操作”,“前缀和”对应“子树和”

经典模型:给定一张无向图和一棵生成树,求每条“树边”被“非树边”覆盖了多少次

解决方案:树上差分,给树上每一个节点一个初始为0的权值,然后对每条非树边(x,y),令x权值加1,y权值加1,lca(x,y)的权值减2,最后对这棵生成树进行一次dfs,求出f[x]表示以x为根的子树中各节点的权值之和。f[x]就是x与它的父节点之间的“树边”被覆盖的次数 

利用树上差分快速求出树上一点在几条给定路径上的模板:[USACO15DEC]Max Flow P 

下面我们利用这个模板题所学到的树上差分技巧,分析 noip中是如何运用的呢?


t1.[NOIP2015 提高组] 运输计划   【lca+树上差分+二分答案】

题意:在一棵带权的树上有m条路径,清零一条边的边权使得m条路径的最大值最小

分析:

(1)最长路径最短--->二分--->二分这个最长路径最小值,统计长度>=mid的路径能否在删边后满足长度小于等于mid (求解转判定

(2)删什么边?--->思考:对于现有的所有长度>=mid的路径,是不合法的,都需要删边处理

--->得出结论:被所有长度>=mid的路径经过长度尽量长的边

(3)具体如何统计经过次数?---树上差分!

上一篇:NOIP 计划 · 模拟赛 #10


下一篇:对于VSCode使用emmet编辑a*5或 span*5,生成多个行内标签时,不会自动换行的解决方案