Escrito por Estela Baron
Conhecimento prévio necessário:
Nesse problema, a primeira ideia que temos é tentar realizar um algoritmo de dijkstra para obter o menor custo do vértice
até o vértice
, pois o nosso grafo é bidirecionado e as arestas têm peso. No entanto, a condição imposta impede o funcionamento da ideia original, pois o menor custo pode ser com uma quantidade ímpar de pedágios.
Para resolver isso, em vez de armazenar o menor custo para chegar em um determinado vértice, vamos armazenar dois custos:
: o menor valor para chegar em
com um número par de pedágios e
: o menor valor com um número ímpar de pedágios.
Com isso, podemos realizar o algoritmo de dijkstra com algumas alterações:
- a
armazena primeiro o
(para ordenar de forma crescente), depois o vértice e, por último, a paridade (os dois últimos não precisam estar em uma ordem específica) - quando for visitar um vizinho, tem que inverter a paridade atual – um jeito de fazer isso é fazer a operação XOR (^) , pois

- o único custo inicial que temos é o
, pois, inicialmente, Pat já começa no vértice
com zero de custo e zero pedágios (quantidade par) - tem que retornar
(
não atende às condições), caso contrário, 
A complexidade dessa solução é a mesma de um algoritmo de dijkstra normal, ou seja, 
Recomendamos que você tente implementar o problema antes de ver o código.Veja a implementação nesse link.
