Snowy Mountain (找规律来贪心+ 多源特殊bfs+根号n)

题目大意:

  • 给定一棵 nn 个点的树,其中每个点可能是黑色或白色。
  • 一个点的高度定义为其距离最近黑色节点的距离。
  • 你初始在 ii 号节点上,势能为 00,可以做以下两种操作:
  • 向高度更小的相邻节点移动,增加 11 的势能。
  • 向高度相同的相邻节点移动,减少 11 的势能,这个操作只能在你的势能 \geq 11 时执行。
  • 对于 i=1,2,\cdots, ni=1,2,,n,求出你能做的操作数的最大值。
  • n\leq 2\times 10^5n2×105。

思路:

  • 首先通过BFS将每一个点的高度给求出来
  • 找规律,通过规律来贪心, 发现 每一个高度为 h 的点,一定可以走 h步, 在加上h的势能, 这个点可以到一个平台(h=b) (就可以将那部分h-b的势能转化为操作数)
  • 于是就贪心的看 每一个点 所到的平台的高度最小是哪里就行了 
  • 继续找规律, 发现这个平台(几个相同高度的点想连接在一起) ,一个要组合成一个平台(高度=h),就至少需要花费 2*h个点. 不同高度的平台个数最多为根号n,
  • 证明: n个不同高度的平台需要的点数为: 2*(1+2+3+4+5+6+......)=n*(n+1); 所以 不同高度的平台个数最多为根号n,
  • 然后从平台高度入手,看哪些点可以到他, 由于是树, 边权也不奇怪, 传递也是有规律, 就多源 bfs层数, 同层 +1, 不然就-1, 点权值<=0,即可  

 

posted @ 2022-10-21 11:43  VxiaohuanV  阅读(38)  评论(0编辑  收藏  举报