#804 Mas que maxflow lo plantee como mincut. Monte un grafo donde los nodos son las instrucciones y hay una arista a->b si b se ejecuta despues de a (ya sea porque es la siguiente o porque hay un jump). En ese grafo habran minimo dos "componentes" una que contiene la primera instruccion y otra la ultima.
En el grafo incluyo tambien las aristas "complementarias", que son las que habrian si se cambia un noop por un jump y viceversa. Por la definicion del problema, al añadir estas aristas, ya deberia haber un camino entre la primera y la ultima instruccion. Poniendo las aristas complementarias con capacidad 1 y el resto 100, me aseguro que el mincut solo contenga aristas complementarias.
Esa es la teoria, pero... en la practica no funciono como me esperaba. Pensaba que el mincut contendria solo la solucion correcta, pero no cai en que si habia un camino alternativo cambiando varias instrucciones tambien formarian parte del mincut. Como ya lo tenia implementado simplemente lo hice por fuerza bruta en el conjunto reducido que devuelve.
https://github.com/Daverlo/aoc-2020/blob/master/src/days/day8/main.go