Traté de hacer este problema: 1984 – Pesadilla de navegación, pero obtengo TLE. ¿Cómo puedo mejorar mi algoritmo? ¿Cuál es la explicación de esta tarea?

La razón por la que su programa excede el límite de tiempo es porque para cada consulta realiza cálculos O (N). Solo por eso, la complejidad del tiempo es al menos O (NK), y eso es suficiente para exceder el límite de tiempo.

La idea para la solución de este problema es que no necesita reconstruir los gráficos para cada consulta. Si los dos vértices están conectados en un punto, la distancia de Manhattan entre los dos vértices es constante, independientemente del borde que se agregue más adelante. Por lo tanto, responder una consulta se reduce a responder las siguientes dos preguntas.
1. ¿Están los dos vértices conectados en el momento consultado?
2. ¿Cuál es la distancia de Manhattan entre los dos puntos después de que el gráfico está completamente conectado?

La primera pregunta se puede responder utilizando la estructura de conjuntos disjuntos (union-find), fusionando los conjuntos de dos vértices después de agregar cada borde. La segunda pregunta puede responderse simplemente atravesando el árbol (el problema dice que el gráfico es un árbol) y calculando las diferencias relativas en las dos coordenadas.

hyun-min-choi / 1984.cpp
Este es mi código para el problema.

Lo primero que debe hacer cuando su solución obtiene TL es reemplazar cin and cout por algo más rápido o usar hacks especiales.
Una vez más en entrada / salida C ++ – Codeforces

editar: esta es una cantidad impresionante de vistas. Union / Find me parece correcto y óptimo. Responda si la optimización de IO no es suficiente para obtener ayuda adicional.

More Interesting

¿Cuáles son los algoritmos actuales de aprendizaje profundo para la restauración de imágenes?

¿Qué es un algoritmo para programar un torneo para que termine en el menor tiempo posible, dado un torneo round robin (donde cada jugador juega entre sí) entre n jugadores (n es par) que puede representarse con un gráfico completo?

¿Es posible crear dos manos robóticas independientes?

¿Son los algoritmos de detección de imágenes el futuro de Silicon Valley?

¿Cuál es la diferencia entre aprendizaje supervisado, no supervisado, refuerzo y aprendizaje profundo?

¿Cuáles son algunos conceptos que debo saber antes de aprender programación dinámica?

¿Cuál es el algoritmo para imprimir el alfabeto 'A' como patrón?

¿Qué sitios web o aplicaciones usan el algoritmo de correspondencia para el cual los profesores Roth y Shapley ganaron el Premio Nobel en 2012?

¿Es posible crear una matriz paralela bidimensional?

¿Por qué el hashing geométrico es más eficiente que usar una matriz indexada de las coordenadas de los puntos característicos?

¿Por qué Google dice que 'Global University' es una de las mejores universidades?

Cómo resolver el problema de 'La lista negra' en un CodeSprint reciente de HackerRank

¿Por qué las computadoras solo pueden hablar en binario?

¿Cómo se resolvería el problema lingüístico 'Summer Eyes', de NACLO 2009?

¿Cuáles son algunas implementaciones reales de algoritmos altamente utilizados o patrones de diseño que ha utilizado en el desarrollo web front-end?