码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ】4530: [Bjoi2014]大融合

时间:2017-10-25 00:39:48      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:题解   维护   end   legend   过程   固定   logs   融合   gen   

【题意】给定n个点的树,从无到有加边,过程中动态询问当前图某条边两端连通点数的乘积,n<=10^5。

【算法】线段树合并+并查集  ||LCT(LCT维护子树信息 LCT维护子树信息(+启发式合并))——嗷嗷待补

【题解】关键在于询问边两端的连通点数。

将原树计算dfs序(强制固定原树形态,方便计算)

设size[x]表示点x所在连通块的大小,那么对于边(u,v),fa[v]=u,有

ans=size[v]*(size[u]-size[v])。

如何实现size的动态计算?

对每个点各自按dfs序维护一棵线段树表示哪些点在此连通块,那么连边就是线段树合并,询问size就是对区间求和。

用并查集维护连通块,连通块中的点指向深度最小的点作为连通块线段树。

 

【BZOJ】4530: [Bjoi2014]大融合

标签:题解   维护   end   legend   过程   固定   logs   融合   gen   

原文地址:http://www.cnblogs.com/onioncyc/p/7726091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!