- Minimize ∑
_{v}c(v) x(v) subject to: - x(v) ≥ 0 for each vertex v ∈ V.
- x(u)+x(v) ≥ 1 for each edge (u,v) ∈ E.

Dual: maximum edge packing:

- Maximize ∑
_{e}y(e) subject to - y(e) ≥ 0 for each edge ∈ E.
- ∑
_{e ∋ w}y(e) ≤ c(v) for each vertex w.

cost(OPT vertex cover) ≥ cost(any feasible solution to the dual)

(follows from weak duality.)

An edge packing y is *maximal* if there is no other feasible edge packing y' such that y ≤ y'.
(In other words, no edge weight can be increased without violating some constraint in the dual.)

**algorithm**

- find a maximal feasible edge packing y
- return all vertices v whose packing constraint is tight

**prove:*** the algorithm is a 2-approximation algorithm*

References:

- Chapter 15 of Approximation Algorithms by Vazirani
- [A primal-dual parallel approximation technique applied to weighted set and vertex cover] - a parallel/distributed algorithm.