P3554 [POI 2013] LUK-Triumphal arch

P3554 [POI 2013] LUK-Triumphal arch

题目描述

给一颗 \(n\) 个节点的树(\(n \le 3 \times 10^5\)),初始时 \(1\) 号节点被染黑,其余是白的。两个人轮流操作,一开始 B 在 \(1\) 号节点。每一轮,A 选择 \(k\) 个点染黑,然后 B 走到一个相邻节点,如果 B 当前处于白点则 B 胜,否则当 A 将所有点染为黑点时 A 胜。求能让 A 获胜的最小的 \(k\)

输入输出样例 #1

输入 #1

7
1 2
1 3
2 5
2 6
7 2
4 1

输出 #1

3

说明/提示

给一颗树,1号节点已经被染黑,其余是白的,两个人轮流操作,一开始B在1号节点,A选择k个点染黑,然后B走一步,如果B能走到A没染的节点则B胜,否则当A染完全部的点时,A胜。求能让A获胜的最小的k

思路

看到最值,一般就想到dp和二分答案,这道题的 \(k\) 具有单调性所以考虑二分答案,随后就将其转化为判定性问题

其实一开始就可以想是不是直接输出节点的儿子数量的最大值,不带任何思考就开始写,最后发现样例都过不了,然后沉下心手玩样例之后发现,可以用之前节点多余的染色机会去“支援”其他的节点,那想到这里就可以发现好像“支援”不太方便表示和计算,但是“被支援”好像是很方便的

那么自然就可以设 \(f_{u}\) 表示 \(u\) 子树所需要的支援数量,那么就可以得到 \(f_u=cnt_u-k+\sum \max(f_v,0)\)

那么判断的时候就只需要看对应的 \(k\)\(f_1\) 是否 \(\le 0\) 就可以了

posted @ 2025-07-29 16:26  shencheng4014  阅读(26)  评论(0)    收藏  举报