好题,长沙邀请赛的一道题。
这种题还是蛮常见的,SPFA+DP优化,记得上次北大校赛就有一道。
根据题意,我们可以虚拟两个超级源点和超级汇点,源点到所有点的距离都是这段距离加上参观的时间。所有点到汇点的距离就是该点到终点的距离。
这样控制之后,对于终点就有2个选择了,路过或者参观。
对于途中除起点终点以外的点,我们可以先进行一遍floyd,然后根据他们的val值进行连边,值是两点之间的距离加上参观的时间。这样对于每一点其实也有两个选择了,可以参观该点,即a -> b,也可以路过该点,即a -> b(路过,floyd保证了这一点) ->c。
然后从源点开始跑一遍spfa,最后在终点和超级汇点之间找到一个最大值,就是答案。
这道题期间犯了一个很2的错误,我已经不能多说了。
下面是代码:
#include #include