Refining my solver, getting to a better solution so far. However, win path is broken, because it needs to look ahead far enough to ensure continual ammo gain or stasis. Currently looking one step ahead and that can be fooled by clever paths that accrue ammo before first visit, but bleed ammo as you continue to move between them.
I believe a heuristic approach will work. Basically, do our cycle check against first-entry assumption (closed loop). E.g. after adding up the cost, and adding up the benefit, of coming back to this point by traversing a valid subgraph. This should reveal if a win-loop is actually just a transient short-term gain due to the accrual of ammo (say on the way to it)