Las emociones de Teto#12449

Las emociones de Teto (Editorial)

Autor del problema:

Taras Derkach

Preparado por:

Taras Derkach

Editorial:

Taras Derkach

Solución

Fijemos el vértice que elegimos como vértice central.

Después de esto, se eliminan todos los vértices que están a distancia exactamente de .

Veamos qué componentes conexas quedan.

La primera componente siempre contiene el propio vértice y todos sus vecinos. Denotemos su suma como center_v:

center_v = a_v + \sum_{u \in adj_v} a_u.

Las demás componentes solo pueden aparecer detrás de los vértices que fueron eliminados.

Sea un vecino del vértice , y sea un vecino del vértice , donde x \ne v.

Entonces el vértice está a distancia exactamente de , por lo que se elimina. Después de eliminar , pueden quedar componentes que están detrás de sus otros vecinos.

Es decir, necesitamos conocer rápidamente el siguiente valor:

si existe una arista , cuál es la suma de la componente que queda del lado del vértice si eliminamos esta arista.

Denotemos esta suma como side(x,y).

Si enraizamos el árbol en el vértice , entonces side(x,y) se puede calcular fácilmente usando sumas de subárboles:

Para cada vértice , guardaremos los dos valores mínimos y los dos valores máximos entre todos los side(x,y) para todos los vecinos .

¿Por qué dos? Porque a veces necesitamos tomar el mejor valor, pero prohibir una dirección específica. Por ejemplo, cuando miramos un vértice eliminado , no podemos tomar la dirección de vuelta hacia , porque llegamos a desde allí.

Luego, para cada vértice , guardaremos las menores y mayores sumas de componentes que pueden aparecer después de eliminar uno de los vecinos del vértice .

En otras palabras, para cada vecino del vértice , tomamos la mejor componente detrás de , pero no en la dirección de vuelta hacia .

Después de esta preparación, la respuesta para un vértice central fijo se puede encontrar rápidamente.

Primero tenemos la componente con suma center_v.

Luego, para cada vecino del vértice , tomamos la menor y la mayor componente posible entre los vértices que están detrás de . Al mismo tiempo, debemos prohibir la dirección de vuelta hacia .

Entre todas las componentes encontradas, buscamos la suma mínima y la suma máxima. El contraste para el vértice es igual a:

maxSum - minSum.

La respuesta es el máximo de este valor entre todos los vértices .

Ejemplo

En el primer ejemplo, es óptimo elegir el vértice v = 4.

Entonces el vértice está a distancia exactamente de él, por lo que se elimina.

Después de la eliminación, quedan dos componentes conexas:

Por lo tanto, el contraste es igual a:

12 - 1 = 11.

Complejidad

Calculamos las sumas de subárboles una sola vez, y después para cada vértice recorremos sus vecinos.

Cada arista se procesa solo un número constante de veces.

Por lo tanto, la complejidad de la solución es .