пусть w:V->R
будет вашей весовой функцией.
Создайте функцию взвешивания: w':E->R
следующим образом: w'(u,v) = w(v)
Запустите dijkstra / bellman-ford с помощью w '.пусть d '[v] будет минимальным весом пути к v, согласно w'.
Тогда, если кратчайший путь s->u1->u2->...->un->v
, вы получите: d'[v] = w'(s,u1) + w'(u1,u2) + ... + w'(un,v)
[по правильности dijkstra / bellman fofrd]и, таким образом, d'[v] = w(u1) + w(u2) + ... + w(un) + w(v)
[по определению w '].
так что в целом вы получите: d[v] = w(s) d'[v]
и d [v] - кратчайший путь для вершин.