- 旅游巴士
旅游巴士思路
- @ 2024-8-24 10:18:16
思路:
开放时间和出入时间必须是k的非负整数倍,可以考虑将图中的每一个点拆分成k个状态,也就是k个时间段。
常规dijstra:dist[i]表示到达第i个点的最短时间
k状态dijstra:dist[i][j]表示到达第i个点且时间 的最短时间。
显然:dist[1][0] = 0 而我们要求的答案为 dist[n][0]
若当前到达 u 号点,且时间是 p,u->v 边权为 w,如果 p < w,当前无法通过,我们可以在起点晚 k 的倍数时间出发,再走到这个点的时候就可以顺利通过了,可知等待时间是 ,消耗时间是
状态转移:
如果 p >= w,可以直接通过:
dist[i][(p+1)%k] = min(dist[i][(p+1)%k], p+1)
否则 令 t = ,即需要我们在起点等待一段时间再通过,转移为:
dist[i][(t+1)%k] = min(dist[i][(t+1)%k], t+1)
0 条评论
目前还没有评论...
信息
- ID
- 110
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 55
- 已通过
- 2
- 上传者