1.Teleporters(Hard Version)

1. 题意:

有 n+2 个位置:0~n+1,给定n个数\(a_1\)\(a_n\) ,有以下操作:

  • 向左/右移动一格,代价为 1。
  • 传送回 0 位置或者 n+1 位置,记你当前的位置为 i,则代价为\(a_i\)。每个位置只能发动一次传送。
    求最大传送次数

2. 思路:

因为每次传送都会回到0/n+1号点,所以,到达i点并传送的代价为 min{i,n+1-i}+\(a_i\) .
按照代价升序排序,从小到大取。
此时发现,第一次传送时,只能从0出发,会导致错误。
枚举第一个点为\(fir\),代价为 \(fir\)+\(a_fir\) .
二分答案\(mid\),表示传送\(mid+1\)次,此时总代价为:

  • \(fir<mid\) \(:\) \((\sum_{i=1}^{mid}{min(i,n+1-i)+a_i} ) + fir+a_fir\)
  • \(fir \geq mid\) \(:\) \((\sum_{i=1}^{mid+1}{min(i,n+1-i)+a_i} ) - min(fir,n+1-fir)+a_{fir} + fir+a_{fir}\)
    判断即可

3. 时间复杂度

排序: \(O(n log n)\)
枚举&二分 \(O(n log n)\)
\(O (n log n)\)

2.给树染色

1. 题意:

一颗树有\(n\)个节点,点有点权.现要将这棵树染色,对于任意节点,在被染色之前它的父亲节点必须已经染上了色。
每次染色的代价为 \(T*A[i]\),其中\(T\)代表当前是第几次染色。
求把这棵树染色的最小总代价。

2. 思路:

将点权最大的点不断与其父节点合并,合并后新点点权为\(\sum_{i=1}^{n}{a_{N_i}}/n\)
证明合并后新点点权为\(\sum_{i=1}^{n}{a_{N_i}}/n\)
设有两个已合并点级\(N,M\)

  • 交换前,染色代价为:
    \(\sum_{i=1}^{n}{a_{N_i}*(T+i)}\) \(+\) \(\sum_{i=1}^{m}{a_{M_i}*(T+n+i)}\)
  • 交换后,染色代价为:
    \(\sum_{i=1}^{n}{a_{N_i}*(T+m+i)}\) \(+\) \(\sum_{i=1}^{m}{a_{M_i}*(T+i)}\)
    差为
    \(\sum_{i=1}^{m}{a_{M_i}}*n - \sum_{i=1}^{n}{a_{N_i}}*m\)
    大于零
    \(\sum_{i=1}^{m}{a_{M_i}}*n > \sum_{i=1}^{n}{a_{N_i}}*m\)
    \(\sum_{i=1}^{m}{a_{M_i}}/m > \sum_{i=1}^{n}{a_{N_i}}/n\)
    故合并后点权为
    \(\sum_{i=1}^{n}{a_{N_i}}/n\)

3. 时间复杂度

set维护 \(O(n log n)\)

posted on 2024-07-08 22:14  Grylls_117  阅读(7)  评论(0编辑  收藏  举报