Dado un gráfico dirigido, ¿podemos hacer DFS en cada nodo para encontrar el nodo de mayor valor?

Parece demasiado complicado, pero funcionaría.

Otro esquema, que me parece más fácil de entender es

Cree un vector de valores M [v] que contenga el máximo de n [v] y el mayor n [x] para cualquier nodo x alcanzable en k pasos.

Comience con k = 0 e inicialice M [v] = n [v]

Recorre todos los nodos y reemplaza M [v] por el máximo (M [v] o M [v] s de sus elementos secundarios).

Repita hasta que no realice ningún cambio.

Si la ruta más larga en el gráfico es k, esto tomará k bucles. Los ciclos de longitud m se resolverán en m pasos.

Esencialmente, los valores n [v] se propagan “arriba” del árbol.

Otra forma es hacer un gráfico con la dirección de los bordes invertidos, luego, para cada nodo, haga DFS para llevar n [v] a los hijos. Si encuentra una n [v] más grande, puede truncar el DFS.

También puede hacer esto con álgebra matricial si lo desea. Cree una matriz E de los bordes, luego inicialice el vector M = n. establece la matriz A = E o I (creando autoenlaces si no existen). Entonces el algoritmo establece M = A max M en cada paso. La operación máxima es como la multiplicación de matrices, excepto que en lugar del producto interno, elige el valor más grande en el vector en lugar de la suma.