SRM659 1100pts

绍一模拟赛的题
【问题描述】
小Z、小Y和小B拥有?$\leqslant 2000$个城市,编号0 . . . ? − 1。对于每一个?(0 ≤ ? ≤? − 2),城市? + 1和城市?????[?]之间存在一条耗时为1的边。这?个城市的
连边构成了一棵树。
现在他们决定选两个城市并建造传送门(可以是同一个城市),当你在一个有传送门的城市时,你可以瞬间移动到另一个有传送门的城市。定义???(?, ?)表示建立传送门后从城市?到城市?花费的最少时间。求满足???{???(?, ?)}(0 ≤ ?, ? < ?) ≤ ? 的建造传送门的不同方案数。((?, ?)和(?, ?)被视为同一种方案)

【分析】

2000的数据范围允许我们枚举所有点对来统计答案,对于枚举两个点,将其中一个提为根会方便我们统计。

原题解写的很清楚,直接引用。

【题解】

可以先枚举第一个传送门所在的城市?,并以?为根建树。枚举第二个传送门所在位置?,定义?到?的链为主链。定义在主链上的点?的权值????为从?出发不经过主链上的点能到点的最大距离。显然,要满足???? +???? +???(???? −???? , ???? −???? +???? −????) ≤ ?(?, ?在主链上且???? > ????)且不经过传送门的点对的距离≤ ?。第二个限制很好处理,考虑第一个限制,如果????+????+????−???? ≤ ?,那么就不需要用到传送门。否则,就要满足???? + ???? + ???? − ???? + ???? − ????) ≤ ?。移项得???? ≤ ? + ???? + ???? − ???? − ???? − ????,后者可以在深搜时维护一个最小值作为上限。考虑新加到主链上的点?,要满足???? + ???? + ???? − ???? + ???? − ???? ≤ ?,移项得???? ≤ ? + ???? + ???? − ???? − ???? − ????(注:这里的a有些问题,可以把另一个a看成i),可以维护直接走距离> ?的点?的????+????的最大值来判断是否有解。将前面的式子移项可得????−????? > ?−????−?????时要用传送门,这个可以用树状数组来维护后缀max,由于树状数组要支持撤销,所以对树状数组每个点开一个队列就行了。

 

转载于:https://www.cnblogs.com/showson/p/5628320.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值