Хмм, а ведь и правда фигня какая-то получается Всё дело в том, что условие "curlen + len + dist[to] <= maxlen" не гарантирует нам, что мы действительно найдём хотя бы один подходящий путь, если пойдём в to. Потому что вершины в пути не могут повторяться, а заранее выполненная Дейкстра ничего об этом не знала. Пример Olegа это демонстрирует.
Понятно, как исправить это с ухудшением асимптотики: на каждом уровне рекурсии после строки "used[v] = true;" выполнять Дейкстру из t во все вершины, но при этом все поюзанные вершины запретить; соответственно, в цикле по to ниже использовать эти только что вычисленные расстояния. Тем самым мы сможем гарантировать, что после захода в вершину to хотя бы один путь в t найдётся, и тогда алгоритм будет работать полиномиально. Но при этом, понятно, вся асимптотика умножится на время выполнения Дейкстры, что не очень хорошо.
В любом случае, в статье и правда серьёзная идейная ошибка, спасибо Olegу. Можно ещё попробовать подумать, как решить эту задачу без такого ухудшения асимптотики, а потом тогда я исправлю и статью.
P.S. Интересно, как тогда у меня этот код прошёл по задаче (где n<=100) в одном из problemsetов...