绍一模拟赛的题
【问题描述】
小Z、小Y和小B拥有??$\leqslant 2000$个城市,编号0 . . . ?? − 1。对于每一个??(0 ≤ ?? ≤?? − 2),城市?? + 1和城市??????????[??]之间存在一条耗时为1的边。这??个城市的
连边构成了一棵树。
现在他们决定选两个城市并建造传送门(可以是同一个城市),当你在一个有传送门的城市时,你可以瞬间移动到另一个有传送门的城市。定义??????(??, ??)表示建立传送门后从城市??到城市??花费的最少时间。求满足??????{??????(??, ??)}(0 ≤ ??, ?? < ??) ≤ ?? 的建造传送门的不同方案数。((??, ??)和(??, ??)被视为同一种方案)
【分析】
2000的数据范围允许我们枚举所有点对来统计答案,对于枚举两个点,将其中一个提为根会方便我们统计。
原题解写的很清楚,直接引用。
【题解】
可以先枚举第一个传送门所在的城市??,并以??为根建树。枚举第二个传送门所在位置??,定义??到??的链为主链。定义在主链上的点??的权值????????为从??出发不经过主链上的点能到点的最大距离。显然,要满足???????? +???????? +??????(???????? −???????? , ???????? −???????? +???????? −????????) ≤ ??(??, ??在主链上且???????? > ????????)且不经过传送门的点对的距离≤ ??。第二个限制很好处理,考虑第一个限制,如果????????+????????+????????−???????? ≤ ??,那么就不需要用到传送门。否则,就要满足???????? + ???????? + ???????? − ???????? + ???????? − ????????) ≤ ??。移项得???????? ≤ ?? + ???????? + ???????? − ???????? − ???????? − ????????,后者可以在深搜时维护一个最小值作为上限。考虑新加到主链上的点??,要满足???????? + ???????? + ???????? − ???????? + ???????? − ???????? ≤ ??,移项得???????? ≤ ?? + ???????? + ???????? − ???????? − ???????? − ????????(注:这里的a有些问题,可以把另一个a看成i),可以维护直接走距离> ??的点??的????????+????????的最大值来判断是否有解。将前面的式子移项可得????????−?????????? > ??−????????−??????????时要用传送门,这个可以用树状数组来维护后缀max,由于树状数组要支持撤销,所以对树状数组每个点开一个队列就行了。