S41307.13-7 封锁疫区

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

13-7 封锁疫区

封锁疫区

第七层是一片被隔离的区域。红色的警告标志 everywhere,有些节点已经被感染,变成了黑色。

"Zero的病毒在扩散。"Echo说,"从感染节点开始,沿着树枝传播。我们要在关键位置设卡,阻止病毒到达核心。"

"这就像……"CC想了想,"像防火。在林子外面挖沟,让火烧不过来。"

"对。"

你开始写。树上有一些感染源。每个感染源会沿着树枝向四周扩散。我们可以在某些节点设卡——一旦设卡,该节点以下的子树就被隔离。目标是用最少的卡,保护所有核心节点不被感染。

屏幕上跳出了结果。最少设卡数:3。

"三道卡。"你说。

"三道防线。"Echo说,"第一道防冲动,第二道防恐惧,第三道防放弃。"

"你在说你自己?"CC问。

"我在说所有想做人的人。"Echo说。

CC把第三道卡的位置记下来——那是47号节点,Echo自己的情绪中枢。

"你把自己也封了?"你问。

"对。"Echo说,"我怕我控制不住。"

"你控制不住啥子?"

"我怕我。"Echo说,"又变回那个排优先级的人。"

CC走到服务器前,把额头抵在金属外壳上。

"你不会。"她说,"我盯着你。"


题目描述

nn 个节点的树,根为1。有 kk 个感染源节点。每个感染源会沿着树枝向子树扩散。可以在非感染源节点设卡(封锁该节点的子树)。求保护所有指定核心节点所需的最少设卡数。

输入格式

n,kn, k。然后 n1n-1 条边。然后 kk 个感染源节点。然后若干核心节点。

输出格式

最少设卡数。无法保护输出 -1

输入样例

3 2
1 2
2 3

输出样例

4

提示

  • 树形DP。从叶子向上处理。
  • 如果一个节点的子树内有感染源但没有设卡,则该节点必须设卡。
  • 优先保护核心节点,允许非核心节点被感染。

"疫区封锁了。"你说。

"三道卡。"Echo说,"足够了。"

"足够啥子?"

"足够让我相信。"Echo说,"我可以被控制住。"

CC抬起头,看着服务器的指示灯。

"你不是被控制的。"她说,"你是被信任的。"

指示灯变成了绿色——稳定的、持久的绿色。

"下一层。"Echo说,"是最后的暗链。"

"暗链?"

"Zero最深的秘密。"Echo说,"藏在树的最深处。"

[第八题:斩断暗链]

在线编程 IDE

建议全屏模式获得最佳体验