メモジャンボ

良い感じのブログタイトル募集中

最小全域木

問題
  1. struct edge { int u, v, cost; };
  2.  
  3. //比較関数
  4. bool comp(const edge& e1, const edge&e2) {
  5. return e1.cost < e2.cost;
  6. }
  7.  
  8. edge es[MAX];
  9. int V, E;
  10.  
  11. int kruskal() {
  12. sort(es, es + E, comp);//costでソート
  13. init(V);
  14. int res = 0;
  15. //コストが小さい辺から順に追加する
  16. REP(i, E) {
  17. edge e = es[i];
  18. //もし閉路ができなければその辺を追加する
  19. if (!same(e.u, e.v)) {
  20. unite(e.u, e.v);
  21. res += e.cost;
  22. }
  23. }
  24. return res;
  25. }
  26.  
  27. int main() {
  28. cin >> V >> E;
  29.  
  30. REP(i, E) {
  31. int s, t, w;
  32. cin >> s >> t >> w;
  33. es[i] = { s,t,w };
  34. }
  35.  
  36. int ans = kruskal();
  37. cout << ans << endl;
  38. }