很典型的一个贪心类型,这种题目通常会用一个叫做 Exchange Argument
的方法来构造正确的贪心策略。
Description
有一个 n n n 个节点的树,每个节点有权值 v i = 0 ∨ v i = 1 v_i=0\lor v_i=1 vi=0∨vi=1 ,求这颗树上节点的一个拓扑序(保证所有节点在它祖先之后),使得所有 v i v_i vi 组成的序列中逆序对数最小,输出最小逆序对个数。
- 1 ≤ n ≤ 2 × 1 0 5 1\le n\le 2\times 10^5 1≤n≤2×105
- v i = 0 ∨ v i = 1 v_i=0\lor v_i=1 vi=0∨vi=1
Analysis
考虑没有拓扑序限制的情况下,最优解一定形如:0,0,...,1,1,1,...
,所有 1 放在最后,逆序对数为 0。
我们希望答案的拓扑序尽可能的接近这个序列,所以有一个初步贪心的想法:
一旦可选节点中有 v i = 0 v_i=0 vi