Why Contraction Must Preserve Augmentation
Blossom contraction lets a search for an augmenting path work with a smaller graph. But a path found in that contracted graph is useful only if it can be expanded into a genuine augmenting path in the original graph. The key is to enter and leave each blossom along the correct arm: the arm from the base to an attachment vertex with even length. Once lifted, the path alternates between unmatched and matched edges, and flipping its edges increases the matching by exactly one.
All original graphs in this tutorial are finite and simple. A matching \(M\) is a set of edges no two of which share an endpoint. A vertex is exposed if it is incident with no edge of \(M\). An augmenting path for \(M\) is a path whose endpoints are exposed and whose edges alternate between edges outside \(M\) and edges in \(M\), starting and ending with edges outside \(M\). In particular, an augmenting path has odd length.
Write the cycle in order as \(b=v_0,v_1,\ldots,v_{2k},b\). Its two cycle edges at \(b\) are unmatched, and the edges along either direction alternate thereafter. For a vertex \(x\) on the cycle, there is one route from \(b\) to \(x\) of even length and one of odd length. The even route has length zero when \(x=b\); when \(x\ne b\), it starts with an unmatched edge and ends with a matched edge. Reversing that route gives a path from \(x\) to \(b\) that starts with a matched edge and ends with an unmatched edge. This last statement applies only when \(x\ne b\); for \(x=b\), the even route is the length-zero path from \(b\) to itself.
The Lifting and Flipping Results
Proof. First consider a path that passes through the contracted vertex. If the path arrives on an unmatched external edge, then it must leave on a matched edge. The matched external edge is incident with the base \(b\): every other blossom vertex is already matched on the cycle. Let \(x\) be the endpoint in the blossom of the arriving unmatched edge. Use the even route from \(x\) to \(b\). If \(x\ne b\), this reversed route starts with a matched edge and ends with an unmatched edge, so it fits between the arriving unmatched edge and the departing matched edge. If \(x=b\), the internal route has length zero, and the two external edges meet at \(b\) with the required unmatched-then-matched status.
In the other orientation, the path arrives on a matched external edge at \(b\) and leaves on an unmatched external edge whose endpoint in the blossom is \(x\). Use the even route from \(b\) to \(x\). If \(x\ne b\), that route starts unmatched and ends matched, fitting between the arriving matched edge and departing unmatched edge. If \(x=b\), again the internal route has length zero, and the two external edges have the required matched-then-unmatched status.
If the contracted vertex is an endpoint of the augmenting path, it is exposed in the contracted matching, so its base is exposed in the original matching. If the path reaches the blossom on an unmatched edge at \(x\), use the even route from \(x\) back to \(b\) and end there. The arriving edge is unmatched, and the route, if nonempty, starts matched and then alternates; its last edge is unmatched. Thus the lifted path ends at the exposed base. Reversing this reasoning handles a path that starts at the blossom. The routes used are simple arcs of the cycle, and the rest of the contracted path lies outside the blossom, so this replacement does not repeat a vertex. The same argument applies recursively when a route or path passes through a blossom contracted earlier: expand the innermost contracted blossoms first, preserving the status of each incident edge, and then apply the argument to the enclosing blossom. Hence the fully expanded path is a path in the original graph with the required alternation. \(\square\)
Proof. The lemma gives a path in the original graph that alternates, starts and ends with unmatched edges, and has exposed endpoints. Thus it is an augmenting path. Let it contain \(2r+1\) edges. In order along the path, the \(r+1\) edges in odd positions are outside \(M\), and the \(r\) edges in even positions are in \(M\). Define the flipped edge set by removing those \(r\) matched path edges and adding the \(r+1\) unmatched path edges.
At each internal path vertex, one incident path edge is added and the other is removed. Therefore exactly one of those two edges belongs to the new edge set at that vertex. At either endpoint, the sole path edge is added, and the endpoint was exposed before the flip. No edge outside the path changes, and no path vertex is incident with an unchanged matching edge, since the old path edges already alternated and the endpoints were exposed. Thus the new edge set is a matching. Its size is \(|M|-r+(r+1)=|M|+1\), as required. \(\square\)
Worked Lifts
Worked Example: A Blossom Passed Through by the Path
Let \(G=(V,E)\), where \(V=\{s,a,b,c,d,e,t,u\}\) and \(E=\{ba,ac,cd,de,eb,sa,bt,tu\}\). The blossom cycle is \(b-a-c-d-e-b\), with base \(b\). Take \(M=\{ac,de,bt\}\). The vertices \(s\) and \(u\) are exposed. Contract the blossom to a vertex \(B\). The resulting path is \(s-B-t-u\), using edge \(sa\), the matched edge \(bt\), and the unmatched edge \(tu\); its statuses are unmatched, matched, unmatched.
The path enters the blossom at \(a\) on the unmatched edge \(sa\), and leaves through the matched edge \(bt\) at the base. The even route from \(a\) to \(b\) is \(a-c-d-e-b\). Its edge statuses are \(ac\) matched, \(cd\) unmatched, \(de\) matched, and \(eb\) unmatched. The lifted path is \(s-a-c-d-e-b-t-u\), with statuses unmatched, matched, unmatched, matched, unmatched, matched, unmatched. It has seven edges and exposed endpoints \(s,u\).
Flip the path: remove \(ac,de,bt\) and add \(sa,cd,eb,tu\). The resulting matching is \(\{sa,cd,eb,tu\}\), of size \(4\); the original matching had size \(3\). The new edges have disjoint endpoints: they cover \(s,a\), \(c,d\), \(e,b\), and \(t,u\), respectively.
Check: the lifted path has four unmatched edges and three matched edges, so the flip changes the size by \(4-3=1\). The displayed new matching has exactly four edges, confirming the calculation.
Worked Example: The Blossom Is an Endpoint
Let \(V=\{p,a,b,c,d,e\}\) and \(E=\{ba,ac,cd,de,eb,pa\}\). Use the blossom cycle \(b-a-c-d-e-b\) with base \(b\), and let \(M=\{ac,de\}\). Both \(p\) and \(b\) are exposed. After contracting the blossom to \(B\), the one-edge path \(p-B\) is augmenting, using the unmatched edge \(pa\).
The path attaches at \(a\). Expand \(B\) by taking the even route from \(a\) to the exposed base \(b\): \(a-c-d-e-b\). The lifted path is \(p-a-c-d-e-b\). In order, its edges \(pa,ac,cd,de,eb\) are unmatched, matched, unmatched, matched, unmatched, so it is an augmenting path between \(p\) and \(b\).
Flipping removes \(ac,de\) and adds \(pa,cd,eb\). The resulting matching is \(\{pa,cd,eb\}\), with size \(3\), compared with the original size \(2\). Its edges have pairwise disjoint endpoints.
Check: the path has three unmatched edges and two matched edges, so its flip increases the size by \(3-2=1\). The resulting three edges are all present in the specified edge set.
Worked Example: Entering Through the Matched Base Edge
Let \(V=\{p,q,a,b,c,d,e,r,w,z\}\) and \(E=\{ba,ac,cd,de,eb,pq,qb,ar,rw,wz\}\). Use the blossom cycle \(b-a-c-d-e-b\), with base \(b\), and matching \(M=\{qb,ac,de,rw\}\). Vertices \(p\) and \(z\) are exposed. After contraction to \(B\), the path \(p-q-B-r-w-z\) has edge statuses unmatched, matched, unmatched, matched, unmatched.
The matched edge \(qb\) attaches at the base. The unmatched edge \(ar\) attaches at \(a\). The even route from \(b\) to \(a\) is \(b-e-d-c-a\), whose statuses are unmatched, matched, unmatched, matched. Therefore the lifted path is \(p-q-b-e-d-c-a-r-w-z\). Its edge statuses, in order, are unmatched, matched, unmatched, matched, unmatched, matched, unmatched, matched, unmatched. It is an augmenting path from \(p\) to \(z\).
Flipping removes \(qb,ac,de,rw\) and adds \(pq,be,cd,ar,wz\). The new matching is \(\{pq,be,cd,ar,wz\}\). The five added edges have disjoint endpoints, so this is a matching of size \(5\), one more than the original size \(4\).
Check: the path has five unmatched edges and four matched edges, giving the size change \(5-4=1\). The five edges in the displayed matching cover the ten distinct vertices exactly once.
Common Mistake: Choosing the Wrong Arm
Not every route around an odd cycle preserves the alternation needed for the lift. In the cycle \(b-a-c-d-e-b\) above, suppose an unmatched external edge arrives at \(a\). Taking the short route \(a-b\) is wrong: \(ab\) is unmatched, so the arriving edge and \(ab\) would be two consecutive unmatched edges. The correct route is the even route \(a-c-d-e-b\), whose first edge \(ac\) is matched and whose statuses then alternate. Its last edge \(eb\) is unmatched, as needed before the matched external edge at \(b\). The base case matters too: when the attachment vertex is \(b\) itself, the even route has length zero; it has no first or last edge to classify.
The lift and flip perform different jobs. Lifting proves that the contracted search has produced a valid augmenting path in the original graph. Flipping then uses alternation and exposed endpoints to prove that the matching condition is preserved and its size increases by one. A path that merely joins the contracted vertices, without these edge-status checks, is not enough.
Check Your Understanding
For each question, track both the attachment vertices and the matched status of the edges.
- In a blossom with base \(b\), what are the first and last edge statuses on the even route from \(b\) to a different cycle vertex \(x\)?
- Why must a matched external edge incident with a contracted blossom attach at its base?
- If an augmenting path has \(2r+1\) edges, how many of its edges are added and how many are removed when it is flipped?
- Why does the even route from an attachment vertex \(x\) to the base have length zero when \(x=b\), and what edge-status claim must not be made about that route?
- For the graph in the first worked example, list the matching after the flip and verify that no two of its edges share an endpoint.