715 unordered_set<int> mst;
717 priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>,
tuple_compare> pq;
722 if(g.find(u) == g.end()) {
725 g[u].insert(make_pair(v, w));
726 if(g.find(v) == g.end()) {
727 g[v] = unordered_set<pair<int, int>, pair_hash, pair_equal>();
729 g[v].insert(make_pair(u, w));
731 mst.insert(g.begin()->first);
732 for(
const auto &p: g[g.begin()->first]) {
733 pq.push(make_tuple(g.begin()->first, p.first, p.second));
736 auto [u, v, w] = pq.top();
738 bool u_in = mst.find(u) != mst.end();
739 bool v_in = mst.find(v) != mst.end();
742 int to_insert = u_in ? v : u;
743 mst.insert(to_insert);
745 for(
const auto &p: g[to_insert]) {
746 if(mst.find(p.first) != mst.end() && mst.find(to_insert) != mst.end())
748 pq.push(make_tuple(to_insert, p.first, p.second));
751 if(mst.size() == n) {
754 cout <<
"impossible";