Editorial for Navios de Azeroth
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtarea 1: (15 puntos):
Para poder obtener los primeros 15 puntos solo bastaba con recorrer todos los nodos a partir de la capital y luego probar todos los posibles subconjuntos de nodos tal que al recorrer las ciudades alcanzables a partir de ellos todos los nodos quedaran visitados. De todos los subconjuntos que cumplan esta condicion nos quedamos con el de tamaño minimo. Esto se podia hacer usando Bitmask y DFS.
Complejidad:
Subtarea 2: Para cada arista en la entrada se garantiza y (20 puntos).
En esta subtarea bastaba con ver cuantos nodos tenian indegree 0 y restar uno a esta cantidad (porque la capital sera uno de estos nodos. Notemos que cualquier nodo tal que exista una arista puede ser visitado a partir de . Ahora notemos tambien que si existe un nodo con indegree 0 no hay manera de llegar a el a partir de otro nodo. Entonces simplemente bastaria con añadir aristas desde hasta estos nodos para poder recorrer toda su componente.
Complejidad:
Subtarea 3: (40 puntos).
Se esperaba que la mayoria de los participantes pudieran llegar hasta aqui
Debido a las constraints esta subtarea permite una solución greedy. Recorremos todos los nodos alcanzables a partir de la capital y marquemoslos como nodos buenos, todos los nodos que no fueron marcados llamemosles nodos malos. Ahora vamos a hacer DFS desde todos los nodos malos y contar cuantos nodos malos son alcanzables a partir de cada uno.
Sea la cantidad de nodos malos alcanzables a partir de . Ordenemos los nodos malos en pares y recorremos en este orden de mayor a menor , cada vez que nos encontramos un nodo que no ha sido visitado sumamos 1 a la respuesta y hacemos DFS marcando los nodos alcanzables.
Complejidad:
Subtarea 4: Sin restricciones adicionales (25 puntos).
Para poder obtener todos los puntos en este problema era necesario comprimir las componentes fuertemente conexas del grafo como un solo nodo, contar cuantas tenian indegree 0 y restar uno a esta cantidad porque la componente que contiene a la capital estara entre ellas.
Complejidad:
Para aprender mas acerca del tema:
https://cp-algorithms.com/graph/strongly-connected-components.html
Comments