Editorial for Red profesional
Submitting an official solution before solving the problem yourself is a bannable offence.
Primero algunas observaciones:
si , y no se paga ni por ni por , entonces se conecta primero que .
Es mejor realizar primero todas las conexiones pagadas, y luego las conexiones gratis.
Por lo cual se pueden ordenar los pares de la entrada, y de este arreglo, se selecciona un subconjunto, se paga, y el resto se conecta en orden. Con esto se puede resolver el problema en lo cual es suficiente para la subtarea 1.
Al arreglo , despues de ordenado, a cada posición se le puede restar (porque se sabe que los elementos anteriores que el se conectarán antes que el a no ser que sea comprado, caso en el cual no importa ) y queda como resultado la cantidad de personas que se tienen que comprar debido a la restricció de la persona .
Se puede resolver ahora con el problema analizando si se compra o no cada elemento en de a , significa comprando conexiones en el sufijo , las transiciones son comprar la persona y moverse a o no comprarla y moverse a si . Con esta en se pueden alcanzar la subtarea 2.
Se puede notar que al comprar el -ésimo elemento es como si se restara a para , y entonces un elemento se puede comprar si .
Además se tiene que para todo , por lo que en el caso de que todos cuesten la solución siempre va a ser un prefijo del arreglo (ordenado) (subtarea 3).
Debido a las observaciones que hemos hecho hasta ahora, se puede elaborar un algoritmo greedy, recorremos de a , manteniendo un conjunto de las conexiones que podemos comprar, en cada paso añadimos a y mientras la cantidad de gente que hemos comprado es menor que , compramos la conexión mas barata posible, la complejidad es si se usa una priority queue o un set, la prueba de este algoritmo se deja como un corto ejercicio al lector.
Comments