DTOJ 4656. 「CSP-S 2019」树的重心

题意

小简单正在学习离散数学,今天的内容是图论基础,在课上他做了如下两条笔记:

  • 一个大小为 n n n 的树由 n n n 个结点与 n − 1 n − 1 n1 条无向边构成,且满足任意两个结点间有且仅有一条简单路径。在树中删去一个结点及与它关联的边,树将分裂为若干个子树;而在树中删去一条边(保留关联结点,下同),树将分裂为恰好两个子树。

  • 对于一个大小为 n n n 的树与任意一个树中结点 c c c,称 c c c 是该树的重心当且仅当在树中删去 c c c 及与它关联的边后,分裂出的所有子树的大小均不超过 ⌊ n 2 ⌋ \lfloor \frac{n}{2} \rfloor 2n (其中 ⌊ x ⌋ \lfloor x \rfloor x 是下取整函数)。对于包含至少一个结点的树,它的重心只可能有 1 1 1 2 2 2 个。

课后老师给出了一个大小为 n n n 的树 S S S,树中结点从 1 ∼ n 1 \sim n 1n 编号。小简单的课后作业是求出 S S S 单独删去每条边后,分裂出的两个子树的重心编号和之和。即:

∑ ( u , v ) ∈ E ( ∑ 1 ≤ x ≤ n 且 x 号点是 S u ′ 的重心 x + ∑ 1 ≤ y ≤ n 且 y 号点是 S v ′ 的重心 y ) \huge{ \sum_{(u,v) \in E} \left( \sum_{1 \leq x \leq n \atop \text{且} x \text{号点是} S'_u \text{的重心}} x + \sum_{1 \leq y \leq n \atop \text{且} y \text{号点是} S'_v \text{的重心}} y \right) } (u,v)Ex号点是Su的重心1xnx+y号点是Sv的重心1yny

上式中, E E E 表示树 S S S 的边集, ( u , v ) (u,v) (u,v) 表示一条连接 u u u 号点和 v v v 号点的边。 S u ′ S'_u Su S v ′ S'_v Sv 分别表示树 S S S 删去边 ( u , v ) (u,v) (u,v) 后, u u u 号点与 v v v 号点所在的被分裂出的子树。

小简单觉得作业并不简单,只好向你求助,请你教教他。

测试点编号 n = n = n=特殊性质
1 ∼ 2 1 \sim 2 127
3 ∼ 5 3 \sim 5 35199
6 ∼ 8 6 \sim 8 681999
9 ∼ 11 9 \sim 11 91149991A
12 ∼ 15 12 \sim 15 1215262143B
16 16 1699995
17 ∼ 18 17 \sim 18 1718199995
19 ∼ 20 19 \sim 20 1920299995

表中特殊性质一栏,两个变量的含义为存在一个 1 ∼ n 1 \sim n 1n 的排列 p i ( 1 ≤ i ≤ n ) p_i (1 \leq i \leq n) pi(1in) 使得:

  • A:树的形态是一条链。即 $\forall 1 \leq i \lt n $,存在一条边 ( p i , p i + 1 ) (p_i, p_i + 1) (pi,pi+1)

  • B:树的形态是一个完美二叉树。即 ∀ 1 ≤ i ≤ n − 1 2 \forall 1 \leq i \leq \frac{n-1}{2} 1i2n1 ,存在两条边 ( p i , p 2 i ) (p_i, p_{2i}) (pi,p2i) ( p i , p 2 i + 1 ) (p_i, p_{2i+1}) (pi,p2i+1)

对于所有测试点: 1 ≤ T ≤ 5 , 1 ≤ u i , v i ≤ n 1 \leq T \leq 5 , 1 \leq u_i,v_i \leq n 1T5,1ui,vin 。保证给出的图是一个树。

题解

考场上想的是直接枚举每个点算它作为重心的贡献,换根一下变为dfs序和子树大小的限制,难以在 O ( n l o g n ) O(nlogn) O(nlogn)内维护。

考虑不要换根,则讨论断掉的边在其子树内或子树外,在子树外可用树状数组维护子树大小的前缀和个数,而在子树内不太好做。又注意到重心的性质,直接以重心为根,割在子树内则不可能,就做完了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值