ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【牛逼做法】P4186 Cow at Large

2022-04-03 07:31:07  阅读:188  来源: 互联网

标签:结论 结点 统治 Cow dfs Large 谷仓 奶牛 P4186


  • 题面 : click

  • 题意 : 农场一颗无根树, 奶牛出现在位置 \(k\) 的谷仓, 有一些出口谷仓, 且其仅与一个谷仓相连。一开始所有出口谷仓都有一个农民, 奶牛农民每个单位时间内可以移动到相邻的谷仓。奶牛的目标是移动到一个出口谷仓, 如果农民与奶牛相遇,那么他就会抓住奶牛。请问至少要多少农民才可以让奶牛无法到达任何一个出口谷仓。

  • 一些想法 : 显然, 先钦定 \(k\) 为根, \(dep_k = 0\)。
    前置结论 \(0.5\) : 结点 \(u\) 农民最多走到他的 \(dep_u / 2\) 级别祖先 (向下取整)。
    我们称一个农民从一个叶子节点比奶牛 走到一个节点, 则他 统治 了该结点及其子树。若是一个节点 \(u\) 及其子树被统治了是优美的, 因为这样奶牛就无法到达 \(u\) 及其子树内的任何一个结点 (结论 \(1\))。于是我们可以考虑求出一个农民向爸爸走最远统治的结点 (结论 \(2\)), 并给其打上了标记。然后再做一遍 \(dfs\), 看看奶牛到每一个叶子上会经过多少个 被统治 的结点即可 (结论 \(2\))。
    \(Tips\) : 如果经过了被统治的节点后, 就要停止 \(dfs\).

  • 正确性证明 :
    前置结论 \(0.5\) : 无需证明, 画图即可。
    结论 \(1\) : 显然, 农夫可以在原地守着不动, 奶牛就进不去 (老六了属于是)。
    结论 \(2\) : 我们如果撤掉了一个被统治的结点 \(u\), \(u\) 子树 肯定 要再安放 至少 一个被统治的节点,否则奶牛可以达到 \(u\) 子树内的任意一个叶子, 故选择统治 \(u\) 结点不会更劣, 若是在 \(dfs\) 过程中遇到了 \(u\), 那么也同理。

  • 咋做 :

  1. 我会暴力 !显然我们可以暴力找到 \(dep_u / 2\) 级别祖先, 然后打标记。
  2. 我会 倍增 / 长剖 转化为 \(k\) 级祖先。由 \(CF208E\) 的特殊 \(Tricks\) 告诉我可以离线 \(dfs\), 然后取栈上 \(k\) 位前的结点。

标签:结论,结点,统治,Cow,dfs,Large,谷仓,奶牛,P4186
来源: https://www.cnblogs.com/Custlo/p/16095065.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有