которая добавляет в gv рёбра, строя дерево (или лес). Итератор parents перечисляет предков вершин (если предка нет, то он возвращает npos == -1) по порядку, начиная с нулевой вершины. Параметр mtd говорит, как ориентировать рёбра: если mtd == child_to_parent, то добавляем только рёбра от потомка к предку, если parent_to_child -- только от предка к потомку, если both -- добавляем оба (имеет смысл для ориентированных графов).
Пусть parents перечисляет значения 1, -1, 3, 1, тогда добавляются рёбра:
child_to_parent: 0-1, 2-3, 3-1, вершина 1 является корнем, поскольку у неё нет предка (в соответствующей позиции стоит -1);
parent_to_child: 1-0, 3-2, 1-3;
both: 0-1, 1-0, 2-3, 3-2, 3-1, 1-3.
void make_tree(Graph_view& gv, Index_iterator_uptr parents, Make_tree_directions mtd);