1

(4 ответов, оставленных в Feedback)

И всё-таки я думаю, что алгоритм где-то некорректен, например для примера:

6 9
4 5 10
4 3 5
5 3 3
5 0 8
0 3 5
0 1 3
0 2 2
1 2 6
2 3 7

Алгоритм выдаёт:
2 0
1 0
5 0
5 3
3 5

Хотя ребро (5,3) и ребро (3,5) - это одно и то же. Копировал точно с исходников.
(Кстати, поздравляю с седьмым местом в контесте на этой неделе на CF).

2

(2 ответов, оставленных в Feedback)

Разве в строке

for (int l=1; l<n; ++l)

не следует заменить условие на l<=n? Ведь длина подстроки может быть равна длине строки.

3

(4 ответов, оставленных в Feedback)

В условии:

if (g[v][to] < min_e[to])

разве не следует добавить

if (g[v][to] < min_e[to] && !used[to])

?

Я конечно мало что в этом понимаю, но мне кажется, что формула (ymax-ymin)/abs(b/g) неверна. Если изначально выбрать такие ограничения, что x1=x2 и y1=y2, то получается, что решений либо же вообще не существует, либо существует одно решение (собственно x1, y1), в последнем случае получается, что ymax=ymin=y1=y2 и формула выдаст 0 (так как в числителе (ymax-ymin) получается 0), хотя правильный ответ 1. Возможно правильная формула (ymax-ymin)/abs(b/g)+1?