rt
#include<bits/stdc++.h>
using namespace std;
// #define int long long
const int MOD = 1e9;
const int N=5e5+10;
int t,n;
int h[N],cnt;
struct node{
int to,val,nextt;
}mp[N];
void add(int a,int b,int c){
mp[++cnt].to=b;
mp[cnt].val=c;
mp[cnt].nextt=h[a];
h[a]=cnt;
}
int d[N],deg[N];
int f[N],ans;
void init(){
memset(h,0,sizeof(h));
memset(mp,0,sizeof(mp));
memset(f,0,sizeof(f));
memset(d,0,sizeof(d));
memset(deg,0,sizeof(deg));
cnt=ans=0;
}
void dfs(int u,int fa){
d[u]=0;
for(int i=h[u];i;i=mp[i].nextt){
int v=mp[i].to,w=mp[i].val;
if(v==fa)continue;
dfs(v,u);
if(deg[v]==1)d[u]+=w;
else d[u]+=min(d[v],w);
// ! min(d[v],w) 就是计算 u 到 v 这条边的贡献
}
}
void dp(int u,int fa){
for(int i=h[u];i;i=mp[i].nextt){
int v=mp[i].to,w=mp[i].val;
if(v==fa)continue;
if(deg[u]==1) f[v]=d[v]+w;
else if(deg[v]==1) f[v]=d[v]+min(f[u]-w,w);
else f[v]=d[v]+min(f[u]-min(d[v],w),w);
dfs(v,u);
}
}
signed main(){
cin>>t;
while(t--){
cin>>n;
init();
int u,v,w;
for(int i=1;i<n;i++){
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
deg[u]++;deg[v]++;
}
dfs(1,1);
f[1]=d[1]; //! 这个根节点的需要转移一下
dp(1,1);
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);
}
cout<<ans<<"\n";
}
return 0;
}