¿Podemos resolver este problema SPOJ.com – Problema PT07Z de esta manera?

La cuestión es que lo que está haciendo es correcto con respecto al tiempo ineficiente. Un bfs de un gráfico con vértices V y aristas E toma O (V + E) si está utilizando una lista de adyacencia. Entonces, si haces bfs para cada vértice, la complejidad general se convertiría en O (V * (V + E)). Por otro lado, si lo hace utilizando 2 BFS / 2 DFS, la complejidad temporal sería O (2 * (V + E)), que no es más que O (V + E), que es muy inferior en comparación con eso en tu enfoque. Por eso, en todos los lugares de Internet, se analiza el método que usa 2 dfs / 2bfs.

Cómo lo hice fue usar 2 DFS. Aquí está mi enfoque

  1. Comience desde el primer nodo, diga S. (aunque puede comenzar desde cualquier nodo)
  2. Haz un dfs del árbol a partir de S. Durante el dfs, almacene las distancias de cada nodo desde S en una matriz, por ejemplo dp1 [] sea esta matriz. (Asegúrese de que los índices de esta matriz sean los mismos que los números de vértice (números de nodo) del gráfico).
  3. Encuentre el índice del valor máximo de esta matriz dp1 [] y almacénelo en una variable, digamos maxx.
  4. Haga un dfs del árbol comenzando desde el nodo con número == maxx. Durante este dfs, almacene las distancias de cada nodo desde maxx en una matriz, por ejemplo dp2 []. (Asegúrese de que los índices de esta matriz sean los mismos que los números de vértice (números de nodo) del gráfico).
  5. El máximo de los valores almacenados en dp2 [] es la ruta más larga entre dos nodos en el árbol. Salida de este valor máximo.

    Aquí está el código de trabajo que envié: AarushJ / acm-icpc-practice

La complejidad de DFS / BFS es O (V + E) para un gráfico conectado. Entonces será O (V) para un árbol .. (E = V-1)

2 Enfoque BFS: Complejidad = O (2V) = O (V)

Su enfoque: Complejidad = O (V ^ 2) … ya que está realizando BFS desde cada vértice … V (para cada vértice) * V (para BFS). Es un enfoque correcto pero no óptimo.

En el problema, N <= 10000. Así que no creo que O (N ^ 2) pase. Es por eso que debe implementar el primer enfoque.

1. Primero use dfs / bfs para que se visiten todos los vértices.

2. Busque el índice para el vértice que está más alejado.

3.Ahora aplique la función dfs / bfs en este vértice.

4. De nuevo encuentre la distancia máxima.

Esta es la distancia máxima requerida entre 2 vértices …