Структура данных Union-find - Как использовать make_sets и правильно найти
По сути, я пытаюсь изменить алгоритм Крускала, добавив еще одно условие, помимо проверки, находятся ли вершины u и v в одном и том же компоненте. Я смутно понимаю, как работает структура данных union-find, поэтому я хотел проверить, правильно ли я понял.
Учитывая, что у меня есть неориентированный граф G = (V, E) и множество A, которое содержит несколько вершин в V (подмножество вершин A ⊂ V), я хочу поймать случаи, когда для каждой вершины u в V (цикл), u также находится в этом наборе A. Я думал об использовании:
(Full Kruskal's algorithm omitted)
original_comp = make_sets(V)
A_comp = make_sets(A)
for each edge (u, v) in E:
if (find(original_comp, u) == find(A_comp, u)):
// do something
Разве это не сработает, потому что установленный параметр отличается (таким образом, разные метки)? Я просто хотел подтвердить...
Чтобы уточнить, мне нужно знать, содержит ли ребро (u, v) одну из вершин в множестве A. И я пытался использовать Union-Find для достижения этого (поскольку find() занимает O(1) время), вместо обхода множества А для сравнения каждого элемента... Может кто-нибудь сказать мне, возможно ли это? Или я должен просто использовать метод обхода массива?
Спасибо.