#include #include using namespace std; const int MAXN = 1000000 + 5; struct treenode { int l, r; int kol; long long sum_odd, sum_even; } tree[MAXN * 4]; int test_cases, n, m, a[MAXN], b[MAXN], act[MAXN], idx[MAXN]; int wn; pair > w[MAXN]; int x[MAXN], y[MAXN], z[MAXN]; void init (int pos, int l, int r) { tree[pos].l = l; tree[pos].r = r; tree[pos].kol = 0; tree[pos].sum_odd = tree[pos].sum_even = 0; if (l < r) { init(pos + pos, l, (l + r) / 2); init(pos + pos + 1, (l + r) / 2 + 1, r); } } void modify (int pos, int j, int tag) { if (tree[pos].l == tree[pos].r) { tree[pos].kol = tag; tree[pos].sum_odd = tag * act[tree[pos].l]; tree[pos].sum_even = 0; return ; } if (tree[pos + pos].r >= j) modify(pos + pos, j, tag); else modify(pos + pos + 1, j, tag); tree[pos].kol = tree[pos + pos].kol + tree[pos + pos + 1].kol; if (tree[pos + pos].kol % 2 == 0) { tree[pos].sum_odd = tree[pos + pos].sum_odd + tree[pos + pos + 1].sum_odd; tree[pos].sum_even = tree[pos + pos].sum_even + tree[pos + pos + 1].sum_even; } else { tree[pos].sum_odd = tree[pos + pos].sum_odd + tree[pos + pos + 1].sum_even; tree[pos].sum_even = tree[pos + pos].sum_even + tree[pos + pos + 1].sum_odd; } } int main(int argc, const char * argv[]) { ios_base::sync_with_stdio(false); cin >> test_cases; while (test_cases--) { cin >> n >> m; for(int i = 1; i <= n; i++) a[i] = 0; wn = 0; for(int i = 1; i <= n; i++) w[++wn] = make_pair(0, make_pair(0, i)); for(int i = 1; i <= m; i++) { cin >> x[i] >> y[i] >> z[i]; a[x[i]] += z[i]; a[y[i]] += z[i]; w[++wn] = make_pair(a[x[i]], make_pair(i, x[i])); if (x[i] != y[i]) w[++wn] = make_pair(a[y[i]], make_pair(i, y[i])); } sort(w + 1, w + wn + 1); for(int i = 1; i <= wn; i++) act[i] = w[i].first; init(1, 1, wn); for(int i = 1; i <= wn; i++) if (w[i].second.first == 0) { modify(1, w[i].second.second, 1); idx[w[i].second.second] = i; } for(int i = 1; i <= n; i++) a[i] = 0; for(int i = 1; i <= m; i++) { modify(1, idx[x[i]], 0); modify(1, idx[y[i]], 0); a[x[i]] += z[i]; a[y[i]] += z[i]; int xx = (int)(lower_bound(w + 1, w + wn + 1, make_pair(a[x[i]], make_pair(i, x[i]))) - w); int yy = (int)(lower_bound(w + 1, w + wn + 1, make_pair(a[y[i]], make_pair(i, y[i]))) - w); idx[x[i]] = xx; idx[y[i]] = yy; modify(1, idx[x[i]], 1); modify(1, idx[y[i]], 1); cout << abs(tree[1].sum_odd - tree[1].sum_even) / 2 << endl; } } return 0; }