You cannot run Dijkstra on the original graph. The best path depends on whether you have used the coupon yet.
Create a state-space graph with two copies of each node: (city, used_coupon). State (c, ) means at city c with coupon unused. State (c, ) means coupon already used.
Run Dijkstra on this expanded state graph. The answer is the minimum of distances to both end states. This doubles the number of nodes but keeps the same complexity.