模拟45 题解
A. kill
显然本题可以二分答案。
于是问题转化为判断一个距离是否可行。
将人和怪物分别按位置排序,
那么每个人选择范围内可以选择的最靠左的怪物,不会使答案更差。
单调指针扫一遍就可以了。
B. beauty
统计每条边儿子方向上的关键点数量,设为$cnt[i]$,
那么另一个方向上的关键点数量为$2k-cnt[i]$,
$ans=\sum \limits_{i=1}^{n-1}min(cnt[i],2k-cnt[i])$
显然答案不会大于这个值,因为跨过每一条边的路径数不会超过这个答案。
构造出一个方案是可行的。
C. weight
考场上想的是:
不考虑每一条边,形成一棵最小生成树。
如果不能形成,则答案为-1。
否则,答案为加上这条边形成的简单环中,边权最大值-1(不包含这条边)。
是正确的,然而没有办法维护这棵要求加边/删边的最小生成树。
正解是类似的:
先求出最小生成树,
那么,对于最小生成树上的非树边,答案为加上这条边,形成简单环边权最大值-1,
对于树边,如果这个权值可以被其它的一些边替换,那么就应该降低权值。
所以对于每一条非树边,使一条链上的权值对该边的权值取min。
所以该题是lct模板题,直接码就完了。