You are on page 1of 1

int prim(const vector<list<pair<int, int>>> &graph, int root) {

set<int> in_tree;
priority_queue<pair<int, int>, std::vector<pair<int, int>>, Compare> pq;

pq.push(make_pair(root, 0));
int cost = 0;
while (!pq.empty()) {
pair<int, int> min = pq.top();
pq.pop();

if (in_tree.find(min.first) != in_tree.end())
continue;

in_tree.insert(min.first);
cost += min.second;

for(list<pair<int, int>>::const_iterator it = graph[min.first].begin();


it != graph[min.first].end(); ++it) {
if (in_tree.find(it->first) == in_tree.end())
pq.push(*it);
}
}

return cost;
}

You might also like