首页 > 其他分享 >POJ 2114 Boatherds / Luogu P3806 【模板】点分治1

POJ 2114 Boatherds / Luogu P3806 【模板】点分治1

时间:2023-01-02 14:57:47浏览次数:53  
标签:10 结点 le Luogu 分治 POJ Boatherds Dis

POJ 2114 Boatherds / Luogu P3806 【模板】点分治1

难度:\(\mathtt{?}\) / 省选/NOI-
标签:点分治
\(\mathtt{blog}\)


\(n\) 个点的树,边 \((u_i,v_i)\) 有边权 \(w_i\),\(m\) 次询问,单次询问是否存在两点间的路径长度为 \(k_i\)。

POJ 数据范围:\(n\le10^4,m\le 100,1\le w_i\le 100,1\le k_i\le 10^7\)。
Luogu 数据范围:\(n\le 10^4,m\le100,1\le w_i\le10^4,1\le k_i\le 10^7\)。


点分治纯模板,后面开坑算法浅谈再细讲。

大致思路:

对于这样一颗树(假定根为 \(1\) 结点,根节点应选取该子树的重心,后文会提到):

把之中的路径分为 \(2\) 部分解决:

  1. 经过根 \(1\) 结点的路径。
  2. 不经过根 \(1\) 结点的路径。

对于第 2 种,可以继续对其子树进行同样的操作分为 \(2\) 种一直递归到叶子结点为止。

对于第 1 种,发现经过根节点的路径都具有一个性质 \(Dis_{u,v}=Dis_{u,G}+Dis_{G,v}(top_u\not=top_v)\),\(G\) 为根节点,\(top_x\) 为 \(x\) 结点在子树中除根节点最靠上的祖先。便可以遍历一遍子树求出 \(Dis_{x,G}\) 和 \(top_x\)。这也是根节点选取重心的原因,因为需要遍历整个树,这样最大的一个子树也不会超过 \(\frac{n}{2}\),\(n\) 为当前数结点个数,最多就只会有 \(\log n\) 层,所以时间复杂度 \(O(n\log n)\) 是点分治打底的。
对于凑出 \(k_i\),选择对 \(Dis\) 排序,用 \(l,r\) 指针维护两数之和,若 \(Dis_{G,l}+Dis{G,r}>k_i\),则 \(r\gets r-1\);同理,若 \(<k_i\),则 \(l\gets l+1\);当 \(=k_i\) 时,还需要判断 \(top_l\) 与 \(top_r\) 的关系,如果不等说明可以凑出,若相等需进行进一步讨论决定 \(l,r\) 哪个指针移动。

记录下询问只需要跑一次操作处理完答案即可,时间复杂度 \(O(n\log^2n+mn\log n)\)。

小优化:发现这个树的长度拉满会到 \(n\times \max{w_i}=10^8\),而要求的答案 \(k\le 10^7\),若根结点至该结点的长度已经 \(>k\) 则肯定无用不用继续递归。


\(\mathtt{Code}\)



标签:10,结点,le,Luogu,分治,POJ,Boatherds,Dis
From: https://www.cnblogs.com/lhzQAQ/p/17019892.html

相关文章

  • Luogu P5676 [GZOI2017] 小z玩游戏
    P5676[GZOI2017]小z玩游戏难度:提高+/省选-标签:Tarjan建图\(\mathtt{blog}\)有\(n\)组数\((w_i,e_i)\),如果当前数值为\(w_i\)即可改变为\(e_i\),如果当前数值......
  • Luogu6620 组合数问题 - 第二类斯特林数 -
    题目链接:https://www.luogu.com.cn/problem/P6620题解:其实就一个式子证明可以利用这个式子找一下规律$$k\binom{n}{k}=n\binom{n-1}{k-1}$$回到原题,把多项式拆开之......
  • Luogu4043 支线剧情 - 费用流 -
    题目链接:https://www.luogu.com.cn/problem/P4043题意:求图一个的路径并,使得所有边都包含且所有路径的权值之和最小,而且路径都是从1开始的题解:每条边都必须经过,容量设一......
  • luogu P4002 [清华集训2017]生成树计数
    题面传送门容易想到放到prufer序列上,变成下面的形式。\(\sum\limits_{\sumc_i=n-2}{\frac{(n-2)!}{\prod\limits_{i=1}^{n}{c_i!}}\prod\limits_{i=1}^{n}{a_i^{c_i+1}(......
  • POJ 2287 Tian Ji -- The Horse Racing(贪心 记忆化搜索)
    POJ2287TianJi--TheHorseRacing题意​ 田忌赛马的故事,相信大家都知道,不多赘述。田忌和国王各有n匹马,每匹马都有一个能力值,两匹马赛跑的话,能力值高者胜。田忌每......
  • POJ 2531 Network Saboteur(DFS)
    POJ2531NetworkSaboteur题意​ 把n个节点分成AB两组,给出矩阵\(C_{i,j}\),求\(\sum{C_{i,j}}(i\inA,j\inB)\)的最大值。思路​ n很小,直接爆搜做。枚举一下......
  • 洛谷 SP11414 / SPOJ COT3 Combat on a tree
    洛谷传送门SPOJ传送门考虑计算出以\(u\)为根的子树的\(\text{SG}\)值。在\(u\)子树内选择一个白点\(w\),将\(w\tou\)上的所有点删去,原树会变成森林,\(\text{S......
  • luogu P4565 [CTSC2018]暴力写挂
    题面传送门神tm部分分可过。首先这个式子先两倍变成\(d_x+d_y+dist(x,y)-2d'_{LCA(x,y)}\)如果我们按照情报中心那题的方法,枚举\(LCA(x,y)\),将\(d_x\)看成\(x\)的点权,\(......
  • POJ1001
    乘幂运算问题描述涉及大数乘幂运算和精度问题是很常见的一类问题。例如,国债的乘幂是许多计算机税务运算系统都避不开的问题。现在要求你写程序计算R的n次幂,R是个实数(0.0......
  • POJ1000
    A+B问题描述计算A+B输入两个整数a,b(0<=a,b<=10)输出输出a+b输入样例12输出样例3提示问:输入和输出在哪里?答:你的程序应该总是在标准输入读数据并向标准输出输......