  This paper shows the weighted matching problem on general graphs can be
solved in time $O(n(m + n\log n))$ for $n$ and $m$ the number of vertices and
edges, respectively. This was previously known only for bipartite graphs. The
crux is a data structure for blossom creation. It uses a dynamic
nearest-common-ancestor algorithm to simplify blossom steps, so they involve
only back edges rather than arbitrary nontree edges.
  The rest of the paper presents direct extensions of Edmonds' blossom
algorithm to weighted $b$-matching and $f$-factors. Again the time bound is the
one previously known for bipartite graphs: for $b$-matching the time is
$O(\min\{b(V),n\log n\}(m + n\log n))$ and for $f$-factors the time is
$O(\min\{f(V),m\log n\}( m + n\log n) )$, where $b(V)$ and $f(V)$ denote the
sum of all degree constraints. Several immediate applications of the $f$-factor
algorithm are given: The generalized shortest path structure of \cite{GS13},
i.e., the analog of the shortest path tree for conservative undirected graphs,
is shown to be a version of the blossom structure for $f$-factors. This
structure is found in time $O(|N|(m+n\log n))$ for $N$ the set of negative
edges ($0<|N|<n$). A shortest $T$-join is found in time $O(n(m+n\log n))$, or
$O(|T|(m+n\log n))$ when all costs are nonnegative. These bounds are all slight
improvements of previously known ones, and are simply achieved by proper
initialization of the $f$-factor algorithm.
