[USACO18JAN] Cow at Large P

题解都说了,当统计 u u u为根节点的时候,答案就是满足以下条件的 i i i的数量: d i ≥ g i d_i≥g_i digi d f a i < g f a i d_{fa_i}<g_{fa_i} dfai<gfai,设这个数量为 a n s ans ans。以下严格证明

首先对于满足这个条件的 i i i,其子树的叶子节点显然最多只有一个有农夫(否则就放多了)

我们考虑任意一个叶子节点 p p p,有 d p ≥ g p = 0 d_p≥g_p=0 dpgp=0,但是对于 u u u又有 d u = 0 < g u d_u=0<g_u du=0<gu;于是我们猜想,从 p p p u u u的路径上,会有一个临界点,从 p p p到这个临界点的点都有 d ≥ g d≥g dg,在这个临界点到 u u u都有 d < g d<g d<g

证:从 p p p出发向 u u u走,每一步 d d d都会减少一,而 g g g要么减少一(当前点到离当前点最远的叶子节点要先走到父亲节点再走到叶子节点,注意中途不会经过当前点)要么增加一(离当前点最远的叶子节点在当前点的子树中,并要满足某种限制条件)要么不变(离当前点最远的叶子节点在当前点的子树中,并且不满足某种限制条件,可以想一下这个限制条件是什么)。所以当第一次 d < g d<g d<g后,之后 g g g的减少程度一定不会超过 d d d的减少程度,也就是说恒有 d < g d<g d<g

有了上述性质我们就可以发现,对于任意一个叶子节点,其到根的路径上有且仅有一个点满足最开始给的不等式,所以对于任意一个叶子节点,我们都可以唯一地指定给一个满足最开始不等式的一个点,而满足最开始不等式的点所管辖的叶子节点集合一定不是空集,也就是说满足最开始不等式的点构成了叶子节点集合的一个划分;而且由上述证明过程可知,设 i i i是满足最开始不等式的点,则离其最近的叶子节点一定在其所管辖的集合中,也就是其子树中(否则的话, i i i走到其父亲, d d d g g g都会减一,仍有 d ≥ g d≥g dg,与最开始的不等式矛盾)

然后我们就可以知道,我们对于每个满足最开始不等式的点,选出离其最近的叶子节点放置农夫,这样就可以在 a n s ans ans个农夫中抓住bessie。而如果答案比 a n s ans ans小,那么由于鸽巢原理,肯定有一个满足最开始不等式的 i i i,其叶子节点一个都没有放农夫,于是Bessie就可以往 i i i走,在其走到 i i i的时候,一定不会有农夫抓住他,然后她任选一个叶子节点就可以桃之夭夭了

相关推荐

  1. [USACO18DEC] S 补题报告

    2024-07-18 00:54:03       33 阅读
  2. [USACO18JAN] Cow at Large P

    2024-07-18 00:54:03       21 阅读
  3. [USACO10OCT] Lake Counting S

    2024-07-18 00:54:03       58 阅读
  4. 洛谷P2176 [USACO11DEC] RoadBlock S / [USACO14FEB]Roadblock G/S

    2024-07-18 00:54:03       28 阅读
  5. P1697 [USACO18JAN] Lifeguards B 题解

    2024-07-18 00:54:03       44 阅读
  6. P1596 [USACO10OCT] Lake Counting S 题解

    2024-07-18 00:54:03       32 阅读
  7. 【洛谷题解】 P1696 [USACO18JAN] Blocked Billboard II B

    2024-07-18 00:54:03       27 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 00:54:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 00:54:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 00:54:03       62 阅读
  4. Python语言-面向对象

    2024-07-18 00:54:03       72 阅读

热门阅读

  1. (78)组合环路--->(02)组合环路危害

    2024-07-18 00:54:03       22 阅读
  2. Apache Flume

    2024-07-18 00:54:03       25 阅读
  3. 编程参考 - 在C++移动构造函数声明中使用noexcept

    2024-07-18 00:54:03       23 阅读
  4. SQL概述及其规则与规范

    2024-07-18 00:54:03       26 阅读
  5. 详解Redis源码中的设计模式及设计思想

    2024-07-18 00:54:03       21 阅读
  6. HTSJDK库Cigar类介绍

    2024-07-18 00:54:03       24 阅读