While the shortest path can be calculated with $O(V+E)$ time over a weighted directed acyclic graph using topological sort, I wonder about the running time of the following BFS type algorithm I thought of.
BFS_requeue(v):
Initialization()
push(s) //push the source node
while the queue contains at least one vertex:
u = pull()
for all edges u -> v
w = edge_weight(u,v)
if dist(v) > dist(u) + w
dist(v) = dist(u) + w
pred(v) = u
push(v)
Compare one of the standard BFS algorithms, this does not mark vertices, and one vertex can be pushed into the queue more than once. Although it seems that popping a vertex more than once can result in a slower running time in general, I am not sure with the exact running time of the algorithm on a (possibly negative) weighted directed acyclic graph.
Although I suspect in the worst case, this runs like Bellman-ford, in $O(VE)$ time, I cannot think of a concrete example. All the examples I thought of run in $O(V+E)$ time. So what is the running time of this algorithm on a weighted DAG?
I think regardless of the running time, this does identify the shortest path, essentially by relaxing all edges. However, I might be incorrect.
This algorithm is taken from page 7 of chapter 8 of Jeff Erickson's textbook on algorithms. I have only modified the algorithm so it applies to weighted graphs. Nonetheless, this problem is specifically about DAG, rather than weighted graphs in general