#include #include #include #include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; if (!(cin >> n >> m)) return 0; vector a(n + 1, 0); for (int i = 0; i < m; ++i) { int u, v; long long w; cin >> u >> v >> w; a[u] += w; a[v] += w; } // 企業を価値の大きい順にソート vector cand; for (int i = 1; i <= n; ++i) { cand.push_back(a[i]); } sort(cand.rbegin(), cand.rend()); // Aliceが偶数番目(0, 2, 4...), Bobが奇数番目(1, 3, 5...)を取得していく long long ans = 0; for (int i = 0; i < n; ++i) { if (i % 2 == 0) { ans += cand[i]; } else { ans -= cand[i]; } } // 契約の定義から、両者が同じグループになったときのみW_iが加算されるため、 // 最終的な「Aliceの利益 - Bobの利益」は、選ばれた頂点に割り当てられた a[i] の総和の差分として表される。 // 全体の総和の半分などのスケーリングを調整 cout << ans / 2 << "\n"; return 0; }