Given a graph G = (V,E) and a set of vertices M ⊑ V, a vertex v ϵ V is said to be controlled by M if the majority of v's neighbors (including itself) belongs to M. M is called a monopoly if every vertex v ϵ V is controlled by M. For a specified M and a range for E (E1 ⊑ E ⊑ E2), we try to determine E such that M is a monopoly in G = (V,E). We first present a polynomial algorithm for testing if such an E exists, by formulating it as a network flow problem. Assuming that a solution E does exist, we then show that a solution with the maximum or minimum |E| can be found in polynomial time, by considering them as weighted matching problems. In case there is no solution E, we want to maximize the number of vertices controlled by the given M. Unfortunately, this problem turns out to be NP-hard. We therefore design a simple approximation algorithm which guarantees an approximation ratio of 2.