struct edge{ int u,v; double cost; bool operator<(const edge &e)const{ return cost>e.cost; } // C++ の priority_queue が max heap なので, つじつまを合わせるために順序を逆にする }; typedef vector< vector > graph; vector Prim(graph G){ // グラフは隣接リストで与える int n=G.size(); // n = |V| vector M; vector H(n); priority_queue Q; Q.push((edge){-1,0,0}); // u0=0 と選んだ. -1 はダミ- while(M.size()