首页 > 其他分享 >BZOJ 3451

BZOJ 3451

时间:2023-09-15 22:25:14浏览次数:43  
标签:3451 limits dfrac sum subtree maxd BZOJ

题目链接

description

厉害题。

给定一棵树,按照题面要求求一个错误点分治的期望执行次数。(不想描述题面了qwq)

solution

考虑拆开计算每个点期望几层点分治后被删除。这个期望值显然就是它对答案的贡献。

我们不妨以这个点为根,那么相当于要求每次删除一个未被删除的点的子树,求删完的期望次数。这个题就是经典的 Game on tree。结论就是所有点的深度加一的倒数和。

放在这个题我们就要求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^n \dfrac{1}{dis(i,j)+1}\)。一个显然的做法是 \(O(n^2)\) 扫一遍,但是会 T。我们可以考虑计算每个路径 \((i,j)\) 的贡献。这就变成了点分治可以处理的问题。

设当前根为 \(p\),子树下的 \(i\) 节点深度为 \(d_i\)。那么我们要求 \(\sum\limits_{i\in subtree(p)}\sum\limits_{j\in subtree(p)} \dfrac{1}{d_i+d_j+1}[lca(i,j) = p]\)。

不妨先算 \(\sum\limits_{i\in subtree(p)}\sum\limits_{j\in subtree(p)} \dfrac{1}{d_i+d_j+1}\)。对于两点在同一个子树内的容斥一下。

设深度为 \(k\) 的点有 \(cnt_k\) 个,把式子改写成 $\sum\limits_{i=1} \dfrac{1}{i}\sum\limits_{j=0} cnt_j cnt_{i+1-j} $ 后面是个卷积形式,可以 FFT。

设 \(maxd=\max\limits_{i\in subtree(p)}\{d_i*2+1\}\) 则单层的时间复杂度为 \(O(maxd\log maxd)\)。

由于每层的 \(maxd\) 不超过这层的总点数,所以时间复杂度 \(O(n\log^2 n)\)。

第一遍淀粉质还写挂了

code

参考代码:提交记录 - BZOJ by HydroOJ

标签:3451,limits,dfrac,sum,subtree,maxd,BZOJ
From: https://www.cnblogs.com/FreshOrange/p/17706019.html

相关文章

  • BZOJ3309 DZY Loves Math
    题目大意对于正整数\(n\),定义\(f(n)\)为\(n\)所包含质因子的最大幂指数。例如\(f(1960)=f(2^3\times5^1\times7^2)=3\),\(f(10007)=1\),\(f(1)=0\)。给定正整数\(a,b\),求下式的值:\[\sum^{a}_{i=1}\sum^{b}_{j=1}f(\gcd(i,j))\]推导首先记\(n=\min(a,b),m=\max(a,b)......
  • [BZOJ 4361] isn
    简述题意给出一个长度为\(n\)的序列\(A(A_1,A_2,\dots,A_n)\)。如果序列\(A\)不是非降的,你必须从中删去一个数,并重复这一操作,直到\(A\)非降为止。求有多少种不同的操作方案,答案模\(10^9+7\)。题面转换......
  • 【BZOJ 3364】Distance Queries 距离咨询 题解
    原题简化题意:有一棵\(n\)个点的树,\(q\)组询问,每次询问回答两点间的距离。令\(dis[i][j]\)表示\(i\)到\(j\)的距离,根节点为\(rt\),则有\(dis[i][j]=dis[rt][i]+dis[rt][j]-2×dis[rt][lca(i,j)]\),按照题意打即可。#include<bits/stdc++.h>usingnamespacestd;#d......
  • BZOJ3337 ORZJRY I 题解
    https://vjudge.net/problem/黑暗爆炸-3337题意试维护一个序列,支持以下\(11\)种操作:输入格式说明1xw在\(a_x\)后插入\(w\)2x删除\(a_x\)3xy翻转\((a_x,a_{x+1},\dots,a_y)\)4xyk将\((a_x,a_{x+1},\dots,a_y)\)右移\(k\)次......
  • BZOJ 4321 queue2 题解
    在硬盘里翻到了当时没推完的这个题,今天补完了最后几步。题目链接:https://hydro.ac/d/bzoj/p/4321对任意相邻两个元素差的绝对值不为\(1\)的\(n\)阶排列计数。\(\mathcal{O}(n^2)\)做法是考虑按照值域由小到大逐步插入,记录\(f_{i,j}\)为长度为\(i\)的排列,一共有\(j\)......
  • 题解 BZOJ4543【[POI2014] HOT-Hotels】
    长链剖分优化DP板子题了,但是虽然是板子这个转移方程也很难想。problem树。求\(\sum_{1\leqi<j<k\leqn}[dist(i,j)=dist(i,k)=dist(j,k)].\)。\(n\leq10^5\)。solution与重链剖分相似,长链剖分是将树剖成很多条长链。我们定义长儿子,为一个点的儿子中子树深度最大的一个儿......
  • 【求助+半题解】BZOJ1461字符串的匹配
    先说思路:因为我们是比对较短的\(B\)与较长的\(A\)的子串,所以我们求不变的\(B\)的\(next\)对于这道题我们可以使用树状数组查询前缀和维护数的排名。对于相同的数我们查询的排名是有误的,因此不仅要比对小于等于该数的前缀和,也要比对小于该数的前缀和。如:对于\(A=2\)\(2\),\(B......
  • 题解 //「BZOJ2406」矩阵
    赛时公告现在呢?:现在有弹窗了吗「2023-07-1916:45:07」此时无声胜有声。F.「BZOJ2406」矩阵http://222.180.160.110:1024/contest/3825/problem/7这是头一次见识到把矩阵和网络流结合在一起的题目。不过这种处理方式也是我们在学习二分图时的常客了:把行和列连边表示某一元......
  • BZOJ 1461 题解
    考虑设计一个哈希函数\(hash(x)=f(x)\timesbase^x\)。其中\(f(x)\)表示\(\sum_{j=1}^{i-1}[j<i]\)。然后类似于滑动窗口计算区间哈希值,加入一个数就计算贡献,减去一个数就计算这个数产生了贡献,两个东西都可以树状数组维护,那么愉快做完了。#include<bits/stdc++.h>#de......
  • BZOJ #3784. 树上的路径
    BZOJ#3784.树上的路径题意给一颗树,求所有路径长度中前\(k\)大。题解首先对于前\(k\)大,我们有一个常见的方法,二分。二分第\(k\)大的路径长度,然后使用点分治统计,点分治内部还要二分,所以时间复杂度\(O(nolg^3n)\)。二分显然是行不通了,想一下就会发现外层和内层的二分......