题目大意
在一棵单位边权的有根树上支持询问:
给定a,k求满足下列条件的有序三元对的个数.
- a,b,c互不相同
- a,b均为c的祖先
- a,b树上距离<=k
题解
solution 1
首先我们知道,c一定在以a为根的子树内,否则不满足条件2
对于一个询问a,k,我们知道b一定在a的k步以内
所以我们把问题分为两部分:
- b是a的祖先
- 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: 谈笑风生 可持久化线段树的更多相关文章
-
[BZOJ 2653] middle(可持久化线段树+二分答案)
[BZOJ 2653] middle(可持久化线段树+二分答案) 题面 一个长度为n的序列a,设其排过序之后为b,其中位数定义为b[n/2],其中a,b从0开始标号,除法取下整. 给你一个长度为n的序 ...
-
【Codechef FRBSUM】【FJOI2016】【BZOJ4299】【BZOJ 4408】 可持久化线段树
4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 475 Solved: 287[Submit][Status ...
-
BZOJ - 3123 森林 (可持久化线段树+启发式合并)
题目链接 先把初始边建成一个森林,每棵树选一个根节点递归建可持久化线段树.当添加新边的时候,把结点数少的树暴力重构,以和它连边的那个点作为父节点继承线段树,并求出倍增数组.树的结点数可以用并查集来维护 ...
-
BZOJ 2653 middle (可持久化线段树+中位数+线段树维护最大子序和)
题意: 左端点在[a,b],右端点在[c,d],求这个线段里中位数(上取整)最大值 思路: 对数组离散化,对每一个值建中位数的可持久化线段树(有重复也没事),就是对于root[i],大于等于i的值为1 ...
-
BZOJ3653谈笑风生——可持久化线段树+dfs序
题目描述 设T 为一棵有根树,我们做如下的定义: ? 设a和b为T 中的两个不同节点.如果a是b的祖先,那么称“a比b不知道 高明到哪里去了”. ? 设a 和 b 为 T 中的两个不同节点.如果 a ...
-
BZOJ 3653: 谈笑风生(DFS序+可持久化线段树)
首先嘛,还是太弱了,想了好久QAQ 然后,这道题么,明显就是求sigma(size[x]) (x是y的儿子且层树小于k) 然后就可以发现:把前n个节点按深度建可持久化线段树,就能用前缀和维护了 其实不 ...
-
【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树
3653: 谈笑风生 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 628 Solved: 245[Submit][Status][Discuss] ...
-
[BZOJ 3218] A + B Problem 【可持久化线段树 + 网络流】
题目连接:BZOJ - 3218 题目分析 题目要求将 n 个点染成黑色或白色,那么我们可以转化为一个最小割模型. 我们规定一个点 i 最后属于 S 集表示染成黑色,属于 T 集表示染成白色,那么对于 ...
-
[BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...
随机推荐
-
Oracle 11g EM安全证书问题无法访问的解决办法
OS: Windows Server 2012 Oracle: 11g R2 上一篇 Oracle 11g EM删除重建的方法 通过命令的方式重建了EM,启动也成功 emctl status dbco ...
-
async 和 await 之异步编程的学习
async修改一个方法,表示其为异步方法.而await表示等待一个异步任务的执行.js方面,在es7中开始得以支持:而.net在c#5.0开始支持.本文章将分别简单介绍他们在js和.net中的基本用法 ...
-
[复试机试]c++读取/写入文本文件
读取文件 #include <iostream> #include <cstdio> #include <string> #include <cstdlib& ...
-
Eclipse安装教程 ——史上最详细安装Java &;Python教程说明
参考链接:https://blog.csdn.net/zichen_ziqi/article/details/73995755
-
SVN提交报错(SVN的bug)
提交的时候报错: Failed to execute WebDAV PROPPATCHsvn: Commit failed (details follow):svn: At least one pro ...
-
CSS快速入门-属性和伪类
一.属性选择器 <div class="gradefather"> hello1 <div name="son">hello2 < ...
-
HTTP 错误 404.3 - Not Found的问题(WCF)
模块 StaticFileModule 通知 ExecuteRequestHandler 处理程序 StaticFile 错误代码 0x80070032 请求的 URL http://10.101.3 ...
-
非常不错的js 屏蔽类加验证类
1 >屏蔽功能类 1.1 屏蔽键盘所有键 <script language="javascript"><!--function document.onkey ...
-
封装一个CSVHelper
public class CSVHelper { /// <summary> /// CSV转换成DataTable(OleDb数据库访问方式) /// </summary> ...
-
springBoot文档地址
文档: https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details 配置: http://docs.spri ...