Помогите ускорить время работы алгоритма Прима
В задаче используется функция с алгоритмом Прима для построения остовного дерева графа, однако, мне подсказывают, что в самом алгоритме приоритет выбора следующей вершины нужно делать за O(log n), а у меня выполняется за O(n).
Как переделать мой алгоритм так, чтобы искать следующую вершину за O(log n)?
PS: Говорят делать с помощью приоритетной очереди, однако, я не пойму где ее тут использовать.
Код:
using namespace std;
const long long inf = 1001;
void My_Prima(vector<vector<pair<int, int>>> const &Vec, const int &n const&m) {
vector <int> dista(n, inf);
vector <bool> used(n, 0);
dista[0] = 0;
while (true) {
int h = -1;
int des = inf;
for (int i = 0; i < n; i++) {
if (!used[i] && (des >= dista[i])) {
h = i;
des = dista[i];
}
}
if (h == -1) {
break;
}
used[h] = true;
for (int i = 0; i < Vec[h].size(); i++) {
if (!used[Vec[h][i].first]) {
dista[Vec[h][i].first] = min(dista[Vec[h][i].first], Vec[h][i].second);
}
}
}
long long finsuma = 0;
for (int i = 0; i < n; i++) {
finsuma += dista[i];
}
cout << finsuma;
}