private void blossom(int v, int w, int base) {
        base = dsf.getRoot(base);
        int[] supports1 = blossomSupports(v, w, base);
        int[] supports2 = blossomSupports(w, v, base);

        for (int i = 0; i < supports1.length; i++)
            dsf.makeUnion(supports1[i], supports1[0]);
        for (int i = 0; i < supports2.length; i++)
            dsf.makeUnion(supports2[i], supports2[0]);

        even[dsf.getRoot(base)] = even[base];
    }
private void blossom ( int v , int w , int base ) { base = dsf . getRoot ( base ) ; int [ ] supports1 = blossomSupports ( v , w , base ) ; int [ ] supports2 = blossomSupports ( w , v , base ) ; for ( int i = 0 ; i < supports1 . length ; i ++ ) dsf . makeUnion ( supports1 [ i ] , supports1 [ 0 ] ) ; for ( int i = 0 ; i < supports2 . length ; i ++ ) dsf . makeUnion ( supports2 [ i ] , supports2 [ 0 ] ) ; even [ dsf . getRoot ( base ) ] = even [ base ] ; }
Create a new blossom for the specified 'bridge' edge.

@param v    adjacent to w
@param w    adjacent to v
@param base connected to the stem (common ancestor of v and w)