You can reduce the set cover problem to this one. That means your problem is NP hard, and you shouldn't expect to find an efficient solution (in general).
That means you should hope that the number of partnerships is small, and perhaps then you can get away with considering all possible subsets of non-singleton road/city partnerships, and finding the shortest path for each (assuming that your path will go through only roads/cities in the given subset you're considering). Then your algorithm will run in 2^P * (N+M) time where P is the number of partnerships, and N and M are the number of cities and roads respectively.
For completeness, here's the reduction from set cover to your graph problem:
The set cover problem is that you're given a finite set S = {s[1], ..., s[n]}, and subsets of S: S[1], S[1], S[2], ..., S[N]. You're asked to find the minimal number of these subsets that cover S.
To use your city problem to find the minimal cover, construct a graph like this. Let the vertices of the graph be START, END, and pairs (S[i], t) where and t is in S[i]. Add edges in the graph between:
- START and (S[i], s[1]) for each S[i] with s[1] in S[i]
- (S[i], s[n]) and END for each S[i] with s[n] in S[i].
- (S[i], s[k]) and (S[i'], s[k+1]) for each k in 1...n-1 and for each S[i] and S[i'] which contain the corresponding elements.
Let the edge weights be all 1, and let the cost of entering (S[i], s) also be 1. All cities/vertices (S[i], s), (S[i], t) share the same cost. No two roads/edges share a cost.
Now, a lowest-cost path from START to END corresponds to finding the minimal set of S[i] that cover S. The cost of that path will be 1 + n + p where p is the size of the minimal cover.