Hitachi2020D 01 on Tree 题解

本文介绍了如何使用贪心算法解决一个关于树的逆序对问题。通过维护一个优先队列并利用并查集,可以找到拓扑序使得节点权值序列中的逆序对数量最小。分析了问题的最优解形式,并详细阐述了贪心策略的证明及实现过程。
摘要由CSDN通过智能技术生成

很典型的一个贪心类型,这种题目通常会用一个叫做 Exchange Argument 的方法来构造正确的贪心策略。

atcoder 题目传送门 & 洛谷题目传送门


Description

有一个 n n n 个节点的树,每个节点有权值 v i = 0 ∨ v i = 1 v_i=0\lor v_i=1 vi=0vi=1 ,求这颗树上节点的一个拓扑序(保证所有节点在它祖先之后),使得所有 v i v_i vi 组成的序列中逆序对数最小,输出最小逆序对个数。

  • 1 ≤ n ≤ 2 × 1 0 5 1\le n\le 2\times 10^5 1n2×105
  • v i = 0 ∨ v i = 1 v_i=0\lor v_i=1 vi=0vi=1

Analysis

考虑没有拓扑序限制的情况下,最优解一定形如:0,0,...,1,1,1,...,所有 1 放在最后,逆序对数为 0。

我们希望答案的拓扑序尽可能的接近这个序列,所以有一个初步贪心的想法:

一旦可选节点中有 v i = 0 v_i=0 vi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值