import std; void main () { int N, M; readln.read(N, M); auto u = new int[](M); auto v = new int[](M); auto W = new int[](M); foreach (i; 0 .. M) { readln.read(u[i], v[i], W[i]); u[i]--, v[i]--; } // ?? auto pts = new long[](N); foreach (i; 0 .. M) { pts[u[i]] += W[i]; pts[v[i]] += W[i]; } auto ord = iota(N).array; ord.sort!((a, b) => pts[b] < pts[a]); auto al = new bool[](N); auto bo = new bool[](N); foreach (index, i; ord.enumerate(0)) { if (index % 2 == 0) { al[i] = true; } else { bo[i] = true; } } long score = 0; foreach (i; 0 .. M) { if (al[u[i]] && al[v[i]]) { score += W[i]; } if (bo[u[i]] && bo[v[i]]) { score -= W[i]; } } writeln(score); } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }