bzoj 3653: 谈笑风生 可持久化线段树

时间:2022-06-25 06:47:44

题目大意

在一棵单位边权的有根树上支持询问:
给定a,k求满足下列条件的有序三元对的个数.

  1. a,b,c互不相同
  2. a,b均为c的祖先
  3. a,b树上距离<=k

题解


solution 1

首先我们知道,c一定在以a为根的子树内,否则不满足条件2
对于一个询问a,k,我们知道b一定在a的k步以内
所以我们把问题分为两部分:

  1. b是a的祖先
  2. a是b的祖先
    对于问题一,我们容易发现答案即为\(min(dep_a,k)*(siz_a-1)\)
    所以现在问题就在于我们如何处理问题2.
    对于问题二我们在这里对c再进行讨论.
    我们发现\(dep_a + k + 1\)是一个分界点
    对于所有的\(c <= dep_a + k + 1\)我们发现对答案的贡献为\(\sum{dep_u - dep_a - 1}\)
    对于所有的\(c > dep_a + k + 1\)我们发现对答案的贡献即为\(num*k\)

所以我们像七彩树一样将深度可持久化,对dfs序建立维护权和的线段树即可.


solution 2

前面的思路和solution1一样,只是在对问题二进行统计的时候,我们换一种思路.
我们这次选择讨论b的位置而不是去讨论c.
我们发现b一定在a的子树中深度不超过\(dep_a + k\)的位置
而对于每个b的位置,我们发现只要c为b的子树中的任何一个与b不同的点即可.
也就是说对于每个我们找到的b的位置,都有\(siz_b - 1\)的c与之对应
所以我们维护所有节点的\(siz - 1\)即可.(siz 表示子树大小).

也将深度可持久化,然后对dfs序建立维护(siz-1)的线段树即可.

代码不想贴.

bzoj 3653: 谈笑风生 可持久化线段树的更多相关文章

  1. &lbrack;BZOJ 2653&rsqb; middle&lpar;可持久化线段树&plus;二分答案&rpar;

    [BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序 ...

  2. 【Codechef FRBSUM】【FJOI2016】【BZOJ4299】【BZOJ 4408】 可持久化线段树

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 475  Solved: 287[Submit][Status ...

  3. BZOJ - 3123 森林 &lpar;可持久化线段树&plus;启发式合并&rpar;

    题目链接 先把初始边建成一个森林,每棵树选一个根节点递归建可持久化线段树.当添加新边的时候,把结点数少的树暴力重构,以和它连边的那个点作为父节点继承线段树,并求出倍增数组.树的结点数可以用并查集来维护 ...

  4. BZOJ 2653 middle &lpar;可持久化线段树&plus;中位数&plus;线段树维护最大子序和&rpar;

    题意: 左端点在[a,b],右端点在[c,d],求这个线段里中位数(上取整)最大值 思路: 对数组离散化,对每一个值建中位数的可持久化线段树(有重复也没事),就是对于root[i],大于等于i的值为1 ...

  5. BZOJ3653谈笑风生——可持久化线段树&plus;dfs序

    题目描述 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ? 设a 和 b 为 T 中的两个不同节点.如果 a ...

  6. BZOJ 3653&colon; 谈笑风生&lpar;DFS序&plus;可持久化线段树&rpar;

    首先嘛,还是太弱了,想了好久QAQ 然后,这道题么,明显就是求sigma(size[x]) (x是y的儿子且层树小于k) 然后就可以发现:把前n个节点按深度建可持久化线段树,就能用前缀和维护了 其实不 ...

  7. 【BZOJ-3653】谈笑风生 DFS序 &plus; 可持久化线段树

    3653: 谈笑风生 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 628  Solved: 245[Submit][Status][Discuss] ...

  8. &lbrack;BZOJ 3218&rsqb; A &plus; B Problem 【可持久化线段树 &plus; 网络流】

    题目连接:BZOJ - 3218 题目分析 题目要求将 n 个点染成黑色或白色,那么我们可以转化为一个最小割模型. 我们规定一个点 i 最后属于 S 集表示染成黑色,属于 T 集表示染成白色,那么对于 ...

  9. &lbrack;BZOJ 3207&rsqb; 花神的嘲讽计划Ⅰ【Hash &plus; 可持久化线段树】

    题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...

随机推荐

  1. Oracle 11g EM安全证书问题无法访问的解决办法

    OS: Windows Server 2012 Oracle: 11g R2 上一篇 Oracle 11g EM删除重建的方法 通过命令的方式重建了EM,启动也成功 emctl status dbco ...

  2. async 和 await 之异步编程的学习

    async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...

  3. &lbrack;复试机试&rsqb;c&plus;&plus;读取&sol;写入文本文件

    读取文件 #include <iostream> #include <cstdio> #include <string> #include <cstdlib& ...

  4. Eclipse安装教程 ——史上最详细安装Java &amp&semi;Python教程说明

    参考链接:https://blog.csdn.net/zichen_ziqi/article/details/73995755

  5. SVN提交报错(SVN的bug)

    提交的时候报错: Failed to execute WebDAV PROPPATCHsvn: Commit failed (details follow):svn: At least one pro ...

  6. CSS快速入门-属性和伪类

    一.属性选择器 <div class="gradefather"> hello1 <div name="son">hello2 < ...

  7. HTTP 错误 404&period;3 - Not Found的问题(WCF)

    模块 StaticFileModule 通知 ExecuteRequestHandler 处理程序 StaticFile 错误代码 0x80070032 请求的 URL http://10.101.3 ...

  8. 非常不错的js 屏蔽类加验证类

    1 >屏蔽功能类 1.1 屏蔽键盘所有键 <script language="javascript"><!--function document.onkey ...

  9. 封装一个CSVHelper

    public class CSVHelper { /// <summary> /// CSV转换成DataTable(OleDb数据库访问方式) /// </summary> ...

  10. springBoot文档地址

    文档: https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details 配置: http://docs.spri ...