tyvj1953 Normal】的更多相关文章

题解: 好神的一道题.蒟蒻只能膜拜题解. 考虑a对b的贡献,如果a是a-b路径上第一个删除的点,那么给b贡献1. 所以转化之后就是求sigma(1/dist(i,j)),orz!!! 如果不是分母的话O(n)就可以搞,但是现在在分母上... 考虑转化一下,求ret[i]表示距离为i的点对有多少对.我们发现只要求出ret数组,然后就可以回答了. 如何求ret,我们用点分治.类似于RACE那道题. 对于一颗子树,我们整个信息一块统计,让它和前面的所有做卷积,更新ret,然后再把这棵子树归入前面的信息…
3451: Tyvj1953 Normal 题意: N 个点的树,点分治时等概率地随机选点,代价为当前连通块的顶点数量,求代价的期望值 百年难遇的点分治一遍AC!!! 今天又去翻了一下<具体数学>上的离散概率,对期望有了一点新认识吧. 本题根据期望的线性性质,计算每个点的代价期望加起来. 一个点v产生了代价,它在u选为中心时所在的cc里,并且(u,v)路径上没有其他点已经被选择.概率为\(\frac{1}{(u,v)之间包含u,v点的个数}\) 统计每种长度的路径有多少个 点分治+生成函数统计…
[BZOJ3451]Tyvj1953 Normal Description 某天WJMZBMR学习了一个神奇的算法:树的点分治!这个算法的核心是这样的:消耗时间=0Solve(树 a) 消耗时间 += a 的 大小 如果 a 中 只有 1 个点  退出 否则在a中选一个点x,在a中删除点x 那么a变成了几个小一点的树,对每个小树递归调用Solve我们注意到的这个算法的时间复杂度跟选择的点x是密切相关的.如果x是树的重心,那么时间复杂度就是O(nlogn)但是由于WJMZBMR比较傻逼,他决定随机…
题目链接 正解:点分治+$FFT$. 很想吐槽一下$bzoj$,为什么搬了别的$oj$的题还设成权限题.. 首先我们考虑期望的线性性,即考虑每个点的贡献. 显然每个点的贡献就是它在点分树上的深度,所以我们进一步考虑哪些点在它到根的路径上. 我们考虑每一条路径的贡献,显然对于一条路径$(x,y)$,当且仅当$x$是路径上最浅的点时会对$y$有$1$的贡献. 那么这条路径$x$深度最浅的概率,实际上就是$\frac{1}{len(x,y)}$,因为每个点作为深度最浅的点的概率相等. 所以我们统计每一…
原文链接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…
国际惯例的题面:代价理解为重心和每个点这个点对的代价.根据期望的线性性,我们枚举每个点,计算会产生的ij点对的代价即可.那么,i到j的链上,i必须是第一个被选择的点.对于i来说,就是1/dis(i,j).所以答案就是sigma(i,j) 1/(dis(i,j)+1).然而这样计算是n^2的,考虑优化.如果我们能计算出边长为某个数值的边的数量的话,是不是就能计算答案呢?统计路径的题,一眼点分治.考虑怎样计算,我们能dfs出每个子树中距离分治重心为x的点有多少个,然后我们枚举两个点让他们取去组成路径…
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,…
我感觉是很强的一道题……即使我在刷专题,即使我知道这题是fft+点分治,我仍然做不出来……可能是知道是fft+点分治限制了我的思路???(别做梦了,再怎样也想不出来的……)我做这道题的话,一看就想单独算每个点的贡献,一开始想算每个点深度的期望,后来又想算每个点的点分树子树大小的期望,再后来就想利用点分治,于是就想算每个联通块的贡献,后来就想怂了……开始说这道题的做法……我们不算每个点的贡献,算每个点对的贡献!!!我们想啊,显然,每个点的点分树子树大小的期望加和就是答案,然而呢,对于一个点,其点分…
题目描述 给你一棵 $n$ 个点的树,对这棵树进行随机点分治,每次随机一个点作为分治中心.定义消耗时间为每层分治的子树大小之和,求消耗时间的期望. 输入 第一行一个整数n,表示树的大小接下来n-1行每行两个数a,b,表示a和b之间有一条边注意点是从0开始标号的 输出 一行一个浮点数表示答案四舍五入到小数点后4位如果害怕精度跪建议用long double或者extended 样例输入 30 11 2 样例输出 5.6667 题解 期望+树的点分治+FFT 由于期望可加,因此所求等于 $\sum\l…
根据期望的线性性,答案就是 \(\sum\) 每个连通块出现次数的期望 而每个连通块次数的期望就是 \(\sum\) 连通块的根与每个点连通次数的期望 也就是对于一条路径 \((i,j)\),设 \(i\) 为根,那么 \(i\) 必须是这条路径第一个被选择的点,概率为 \(\frac{1}{dis(i,j)}\),其中 \(dis(i,j)\) 表示 \((i,j)\) 上的点数 那么只要统计不同的 \(dis(i,j)\) 的个数即可 直接点分治+\(FFT\) # include <bit…