iefnah06

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

URL

https://onlinejudge.u-aizu.ac.jp/problems/1406

题意

\(n\) 个五元组 \((a_i,b_i,c_i,d_i,e_i)\)。一开始你手上的数字是 \(x=x_0\),在 \(1\) 号位置。

假设你在位置 \(i\),值为 \(x\)

  • 如果 \(x=a_i\),那么 \(x\) 会变成 \(x+b_i\),你会走到位置 \(c_i\)
  • 否则,\(x\) 会变成 \(x+d_i\),你会到位置 \(e_i\)

求出能否到达位置 \(n+1\),以及需要的步数,对 \(10^9+7\) 取模。

解法

注意到如果你两次经过同一个点 \(i\) 时都有 \(x=a_i\),那么无解

我们想要在走到一个等于的一个位置后想办法快速跳到下一个等于的位置(这样最多只需要跳 \(n\) 次就可以是否有解了)。把不等于的边建成一个换套树,考虑一下你在树上/环上时怎么跳就行了,代码量比较震撼

复杂度 \(O(n \log n)\)

实现

https://ideone.com/eWbCuk

posted on 2020-05-27 22:31  iefnah06  阅读(260)  评论(0)    收藏  举报