In your example:

```
boykov_kolmogorov_max_flow(graph,
make_iterator_property_map(&capacity[0], get(boost::edge_index,
graph)),
make_iterator_property_map(&residual_capacity[0],
get(boost::edge_index, graph)),
make_iterator_property_map(&reverse_edges[0],
get(boost::edge_index, graph)), //CHANGED
make_iterator_property_map(&groups[0], get(boost::vertex_index,
graph)),
get(boost::vertex_index, graph),
s,
t
);
```

They call the following constructor from here:

```
boykov_kolmogorov_max_flow(Graph& g,
CapacityEdgeMap cap,
ResidualCapacityEdgeMap res_cap,
ReverseEdgeMap rev,
ColorMap color,
IndexMap idx,
typename
graph_traits<Graph>::vertex_descriptor src,
typename
graph_traits<Graph>::vertex_descriptor sink)
```

Which means, that what you think are classes are indeed the colors.
According to the documentation,

If the color of a vertex after running the algorithm is black the
vertex belongs to the source tree else it belongs to the sink-tree (used
for minimum cuts).

Now if you look here at the default color map, the colors are an enum
going from 0 to 4, where 4 is black.

**With all of this, you can conclude that 4 is indeed the source,
but everything else (including the 1's) belong to the sink!**

The different color probably depends on the implementation itself, but I
don't think you can make any assumptions about the 1's without knowing what
the implementation is...