#include<vector>
#include<set>
#include<map>
#include<queue>
#include<string>
#include<algorithm>
#include<iostream>
#include<bitset>
#include<functional>
#include<numeric>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<cmath>
#include<iomanip>
#include<random>
#include<ctime>
#include<complex>
using namespace std;
typedef long long LL;
typedef double D;
#define all(v) (v).begin(), (v).end()
mt19937 gene(233);
typedef complex<double> Complex;
#define fi first
#define se second
#define ins insert
#define pb push_back
inline char GET_CHAR(){
	const int maxn = 131072;
	static char buf[maxn],*p1=buf,*p2=buf;
	return p1==p2&&(p2=(p1=buf)+fread(buf,1,maxn,stdin),p1==p2)?EOF:*p1++;
}
inline int getInt() {
	int res(0);
	char c = getchar();
	while(c < '0') c = getchar();
	while(c >= '0') {
		res = res * 10 + (c - '0');
		c = getchar();
	}
	return res;
}

inline LL fastpo(LL x, LL n, LL mod) {
	LL res(1);
	while(n) {
		if(n & 1) {
			res = res * (LL)x % mod;
		}
		x = x * (LL) x % mod;
		n /= 2;
	}
	return res;
}
LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; }

inline string itoa(int x, int width = 0) {
  string res;
  if(x == 0) res.push_back('0');
  while(x) {
    res.push_back('0' + x % 10);
    x /= 10;
  }
  while((int)res.size() < width) res.push_back('0');
  reverse(res.begin(), res.end());
  return res;
}
const int _B = 131072;
char buf[_B];
int _bl = 0;
inline void flush() {
	fwrite(buf, 1, _bl, stdout);
	_bl = 0;
}
__inline void _putchar(char c) {
	if(_bl == _B) flush();
	buf[_bl++] = c;
}
inline void print(LL x, char c) {
	static char tmp[20];
	int l = 0;
	if(!x) tmp[l++] = '0';
	else {
		while(x) {
			tmp[l++] = x % 10 + '0';
			x /= 10;
		}
	}
	for(int i = l - 1; i >= 0; i--) _putchar(tmp[i]);
	_putchar(c);
}
struct P {
	D x, y;
};
const int N = 300033;
const int LOG = 20;
const int mod = 1e9 + 7;
const int inf = 1e9 + 7;
int n, m;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
int tag[N * 4], mn[N * 4];
void build(int k, int le, int ri) {
	tag[k] = 0; mn[k] = le;
	if(le != ri) {
		int mid = (le + ri) / 2;
		build(k * 2, le, mid);
		build(k * 2 + 1, mid + 1, ri);
	}
}
void add(int k, int le, int ri, int ql, int delta) {
	if(ql <= le) {
		tag[k] += delta;
		mn[k] += delta;
	}else {
		int mid = (le + ri) / 2;
		tag[k * 2] += tag[k];
		mn[k * 2] += tag[k];
		tag[k * 2 + 1] += tag[k];
		mn[k * 2 + 1] += tag[k];
		tag[k] = 0;
		if(ql <= mid) add(k * 2, le, mid, ql, delta);
		add(k * 2 + 1, mid + 1, ri, ql, delta);
		mn[k] = min(mn[k * 2], mn[k * 2 + 1]);
	}
}
int main() {
	int t;
	cin >> t;
	for(int qq = 1; qq <= t; qq++) {
		int n;
		cin >> n;
		LL ans = 0;
		vector<pair<int, int> > v[2];
		for(int i = 1; i <= n; i++) {
			int le, ri, k;
			cin >> k >> le >> ri;
			if(k == n) {
				ans += le;
				continue;
			}
			ans += min(le, ri);
			if(le >= ri) v[0].pb(make_pair(le - ri, k));
			else v[1].pb(make_pair(ri - le, n - k));
		}
		for(int d = 0; d < 2; d++) {
			sort(v[d].begin(), v[d].end());
			reverse(v[d].begin(), v[d].end());
			build(1, 1, n);
			for(auto tmp : v[d]) {
				//printf("%d %d %d %d\n", qq, d ,tmp.fi, tmp.se);
				add(1, 1, n, tmp.se, -1);
				if(mn[1] < 0) {
					add(1, 1, n, tmp.se, 1);
				}else {
					ans += tmp.fi;
				}
			}
		}
		cout << ans << endl;
	
	}
}






Measured memory_bytes: 9044