bzoj3451 Normal】的更多相关文章

[BZOJ3451]normal 点分治,NTT 好久没更博了,咕咕咕. BZOJ3451权限题,上darkbzoj交吧. 一句话题意,求随机点分治的期望复杂度. 考虑计算每个点对的贡献:如果一个点在点分树上是另一个点的祖先,那么这个点对另一个点的贡献就是1,这样的话,这个点就必须是这两个点之间的链上的点中在点分树上深度最浅的点,由于链上每个点成为点分树上最浅的点的概率都是相等的,所以这个点对对最终的期望的贡献就是\(\frac{1}{dis(i, j) + 1}\),这里的\(dis(i, j…
[BZOJ3451]Normal(点分治+FFT) 题面 给你一棵 n个点的树,对这棵树进行随机点分治,每次随机一个点作为分治中心.定义消耗时间为每层分治的子树大小之和,求消耗时间的期望. 分析 根据期望的线性性,答案是\(\sum_{i=1}^n(i的期望子树大小)=\sum_{i=1}^n \sum_{j=1}^n [j在i的点分治子树内]\) 考虑j在i的点分治子树内的条件,显然i到j的路径上的所有点中,i是第一个被选择为分治中心的.否则如果选的点不是i,那么i和j会被分到两棵子树中.第一…
BZOJCH传送门 题目大意:给出一棵树,求对其进行随机点分治的复杂度期望 可以知道一个点的贡献就是其点分树上的深度,也就是这个点在点分树上的祖先数量+1. 根据期望的线性性,考虑一个点对\((x,y)\)在何时\(x\)能够是\(y\)的祖先,那么在\(x\)到\(y\)的路径上的所有点中\(x\)必须要是第一个被选中的点,否则要么点\(y\)变成点\(x\)的祖先,要么点\(x\)和点\(y\)会被分在不同的子树中.那么我们要求的就是\(\sum \frac{1}{dis_{x,y}}\),…
题意:点分治每次随机选重心,求期望复杂度. 发现一次点分治的复杂度就是点分树上每个节点的子树大小之和.(并没有发现......) 看这个. 注意这个写法有问题,随便来个菊花图就是n2了. 每一层点分治的时候,时间复杂度决不能与上一层大小挂钩. /************************************************************** Problem: 3451 Language: C++ Result: Accepted Time:5548 ms Memory…
[BZOJ3451]Normal Description 某天WJMZBMR学习了一个神奇的算法:树的点分治! 这个算法的核心是这样的: 消耗时间=0 Solve(树 a) 消耗时间 += a 的 大小 如果 a 中 只有 1 个点 退出 否则在a中选一个点x,在a中删除点x 那么a变成了几个小一点的树,对每个小树递归调用Solve 我们注意到的这个算法的时间复杂度跟选择的点x是密切相关的. 如果x是树的重心,那么时间复杂度就是O(nlogn) 但是由于WJMZBMR比较傻逼,他决定随机在a中选…
[BZOJ3451]Normal (点分治) 题面 BZOJ 题解 显然考虑每个点的贡献.但是发现似乎怎么算都不好计算其在点分树上的深度. 那么考虑一下这个点在点分树中每一次被计算的情况,显然就是其在某个点的点分树内时才会被计算答案. 那么设\(p[i][j]\)表示\(i\)在\(j\)的点分树里面的概率. 那么答案就变成了\(\sum_i\sum_j p[i][j]\) 那么\(i\)在\(j\)的点分树的概率显然就是两点之间路径不被断开的概率,即\(\frac{1}{dis(i,j)+1}…
[BZOJ3451]Tyvj1953 Normal Description 某天WJMZBMR学习了一个神奇的算法:树的点分治!这个算法的核心是这样的:消耗时间=0Solve(树 a) 消耗时间 += a 的 大小 如果 a 中 只有 1 个点  退出 否则在a中选一个点x,在a中删除点x 那么a变成了几个小一点的树,对每个小树递归调用Solve我们注意到的这个算法的时间复杂度跟选择的点x是密切相关的.如果x是树的重心,那么时间复杂度就是O(nlogn)但是由于WJMZBMR比较傻逼,他决定随机…
题解: 好神的一道题.蒟蒻只能膜拜题解. 考虑a对b的贡献,如果a是a-b路径上第一个删除的点,那么给b贡献1. 所以转化之后就是求sigma(1/dist(i,j)),orz!!! 如果不是分母的话O(n)就可以搞,但是现在在分母上... 考虑转化一下,求ret[i]表示距离为i的点对有多少对.我们发现只要求出ret数组,然后就可以回答了. 如何求ret,我们用点分治.类似于RACE那道题. 对于一颗子树,我们整个信息一块统计,让它和前面的所有做卷积,更新ret,然后再把这棵子树归入前面的信息…
原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3451.html 题目传送门 - BZOJ3451 题意 给定一棵有 $n$ 个节点的树,在树上随机点分治,问消耗时间的期望. 计算点分治耗时由如下函数给出: Time = 0 Solve( T ){ Time += |T| if ( |T| = 1 ) then return ; x = 一个随机节点 in T for y in {与 x 直接连边的节点 in T} do Solve( SubTre…
https://www.cnblogs.com/GXZlegend/p/8611948.html #include<cmath> #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) #define For(i,x) for (int i=h[x],k; i; i=nxt[i]) using namespace std; ; .); int n,u,…