这个问题比较坑的一点就是注意调整沿途车的数量只在去程做,回程不做。也就是说,只有前往问题车站的路上才可以调整车辆。
使用DFS在做的时候,对每一个站点 i 会维护两个参数require和extra,表示在当前站点去程带去的车辆数和回程带回的车辆数。由于上面所述的那一点,每一站计算完成require和extra后,下一站只能由多出来的extra辆车去填补该站缺少的车,不能用该站多余的车填补前面几站缺少的车。也就是说,require只能增加,extra可增可减。明白这一点,问题就好解决了。
下面是Python3的AC代码:
cmax,n,sp,m = [int(x) for x in input().split() ]
C = [0] + [ int(x) for x in input().split() ]
Neib = [ {} for i in range(n+1) ]
for i in range(m):
si,sj,t = [ int(x) for x in input().split() ]
Neib[si][sj] = t
Neib[sj][si] = t
minpath = []
minrequire = cmax+1
minextra = cmax+1
mindis = -1
vis = [0] * (n+1)
def dfs (Neib,path,dis,require,extra,st):
global minrequire
global minextra
global mindis
global minpath
#print(path,dis,require,extra,st)
vis[st] = 1
if st ==