Editorial for Grafo de Intervalos
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Por simplicidad sumemos los pesos de todos los intervalos y a ello restemos los valores los intervalos que quedarán al final.
Subtarea 1:
En esta subtarea como los intervalos son puntos y todos tienen costo 1, simplemente podemos quedarnos con la mayor cantidad de puntos.
Subtarea 2:
En esta subtarea como los intervalos son puntos, para cada posición nos quedamos con el intervalo con mayor peso en cada posición
Subtarea 3:
Como , y , es simplemente decir la mayor cantidad de intervalos que se pueden tomar tal que no se intersecten, se puede hacer con dp o con greedy ordenando por y cogiendo el primer intervalo posible repetivamente.
Subtarea 4:
Como es simplemente decir la mayor suma de pesos de intervalos que se pueden tomar tal que no se intersecten, se puede hacer con dp.
Subtarea 5:
Esta subtarea puede ser resuelta por implementaciones más sencillas de la solución general.
Subtarea 6:
Por conveniencia, llamaremos bueno a un conjunto de intervalos si todos los componentes conectados tienen un tamaño como máximo. Toma la unión de intervalos en cada componente conexa. Los intervalos representados por cada componente son disjuntos. A partir de esto, usaremos el enfoque DP donde fijamos la unión de intervalos y llenamos cada componente.
Discretice los intervalos para que tengan coordenadas de hasta y defina como el costo máximo de los intervalos tal que los intervalos elegidos sean buenos, considerando solo los intervalos cuyo punto final más a la derecha es menor o igual a . La respuesta es por lo tanto .
Si definimos como el costo máximo de los intervalos a tomar tal que, considerando solo los intervalos que se encuentran completamente en , el conjunto resultante de intervalos pertenece a un solo componente conexo bueno, entonces tenemos que . Para calcular , simplemente podemos encontrar los intervalos que se encuentran completamente dentro del intervalo y tomar los de mayor peso.
Esto puede resultar en no tener el único componente conectado, pero no importa ya que cada componente conectado seguirá siendo bueno de todas formas. Dado que se puede calcular ingenuamente en tiempo , queda por calcular de manera eficiente. Si barrimos de a , con un poco de contabilidad cuidadosa podemos calcular en tiempo , lo cual nos daría un algoritmo en .
Consideraremos todos los intervalos con punto final izquierdo menor o igual que el activo, y además dividirlos en intervalos que se extienden más allá de e intervalos que no lo hacen. Cuando barremos a en orden creciente, algunos intervalos se vuelven inactivos. Deseamos mantener la suma de los intervalos más pesados que no pasan de , lo que se puede hacer barriéndolos en orden decreciente de peso y asegurándonos de no haber incluido más de de ellos.
Comments