//#include <iostream>
//#include <iomanip>
//#include <cmath>
//#include <vector>
//#include <queue>
//#include <map>
//#include <set>
//#include <algorithm>
//
//
//using namespace std;
//#define ll long long
//#define endl '\n'
//#define itn int
//
//const long long oo=1000000000000;
//const long long N=1500005;
//
//vector<vector<ll>>g(N);
//vector<bool>used(N);
////set<pair<ll,ll>>bridge;
////ll mx=0;
////ll T=0;
////ll tin[N];
////ll fup[N];
//
//vector<ll>top_sort;
//void dfs(ll v)
//{
//    used[v]=true;
//    for(auto to:g[v])
//    {
//        if(used[to]==false)
//        {
//            dfs(to);
//        }
//    }
//
//    top_sort.push_back(v);
//
//}
//ll color[N];
//ll col=0;
//void color_dfs(ll v)
//{
//    color[v]=col;
//    used[v]=true;
//    for(auto to:g[v])
//    {
//        if(used[to]==false)
//        {
//            color_dfs(to);
//        }
//    }
//}
////
////ll br(ll v,ll pred)
////{
////    tin[v]=T;
////    fup[v]=T;
////    T++;
////    used[v]=true;
////    for(auto to:g[v])
////    {
////        if(used[to]==true)
////        {
////            fup[v]=min(fup[v],fup[to]);
////        }
////        else
////        {
////            br(to,v);
////            fup[v]=min(fup[v],tin[to]);
////            if(tin[to]==fup[to])
////            {
////                bridge.insert({v,to});
////                cout<<v<<" "<<to<<endl;
////            }
////        }
////
////    }
////
////}
////vector<ll>pr(N);
////
////ll get(ll a)
////{
////
////    if(pr[a]==a)return a;
////    return pr[a]=get(pr[a]);
////}
////
////void merdge(ll a,ll b)
////{
////    a=get(a);
////    b=get(b);
////    if(a==b)return;
////    if(rand()%2==0)
////    {
////
////        swap(a,b);
////    }
////    pr[a]=b;
////
////}
//
//int main()
//{
//
////    ios_base::sync_with_stdio(0);
////    cin.tie(0);
////    cout.tie(0);
//
//
//    ll test;
//    cin>>test;
//    while(test--)
//    {
//
//        ll n;
//        cin>>n;
//
//        top_sort.clear();
//        for(int i=1; i<=2*n; i++)
//        {
//            g[i].clear();
//            color[i]=0;
//
//        }
//        used.clear();
//        used.resize(2*n+1,false);
//        map<ll,ll>m;
//        ll a[n],b[n],c[n];
//        for(itn i=0; i<n; i++)
//        {
//
//            cin>>a[i]>>b[i]>>c[i];
//
//            g[a[i]].push_back(b[i]);
//            g[b[i]].push_back(a[i]);
//        }
//        for(itn i=1; i<=2*n; i++)
//        {
//            if(used[i]==false)dfs(i);
//        }
//        reverse(top_sort.begin(),top_sort.end() );
//        col=1;
//        used.clear();
//        used.resize(2*n+1,false);
//        for(itn i=0; i<top_sort.size(); i++)
//        {
//
//            if(used[top_sort[i]]==false)
//            {
//
//                color_dfs(top_sort[i]);
//            }
//            col++;
//        }
//        for(int i=1; i<=2*n; i++)
//        {
//
//            cout<<i<<" "<<color[i]<<endl;
//        }
//        for(int i=0; i<n; i++)
//        {
//            if(color[a[i]]==color[b[i]])
//            {
//
//               m[color[i]]+=c[i];
//            }
//
//        }
//       ll mx=0;
//        for(auto [to,val]:m)
//        {
//
//            mx=max(mx,val);
//        }
//
//        cout<<mx<<endl;
//        //<<"xas ";
//
//    }
//
//}
//1
//6
//1 2 1
//1 3 2
//2 3 3
//3 4 4
//5 2 6
//4 5 5
#include <iostream>
#include <iomanip>
#include <cmath>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <algorithm>


using namespace std;
#define ll long long
#define endl '\n'
#define itn int

const long long oo=1000000000000;
const long long N=1500005;

vector<vector<pair<ll,ll>>>g(N);
vector<bool>used(N);
ll mx=0;
ll sum=0;
void dfs(ll v)
{

    used[v]=true;
    for(auto [val,to]:g[v])
    {
        if(used[to]==false)
        {
            sum+=val;
            dfs(to);
        }
    }

}
void cycle(ll v,ll pred,ll d)
{
   // cout<<v<<" "<<d<<endl;;

    if(used[v]==true)
    {
        mx=max(mx,d);
       //  cout<<mx<<endl;
        return;

    }
    used[v]=true;
    for(auto [val,to]: g[v])
    {
        if(to==pred)
        {
            mx=max(mx, val);
          //  cout<<" f "<<mx<<endl;
           // break;
        }
        else
        {

            cycle(to,v,d+val);
        }

    }

}

int main()
{

//    ios_base::sync_with_stdio(0);
//    cin.tie(0);
//    cout.tie(0);


    ll test;
    cin>>test;
    while(test--)
    {

        ll n;
        cin>>n;
        vector<ll>m(2*n+1,0);
        for(int i=1; i<=2*n; i++)
        {

            g[i].clear();

        }
        used.clear();
        used.resize(2*n+1,false);
        ll a[n+1],b[n+1],c;
        for(itn i=0; i<n; i++)
        {

            cin>>a[i]>>b[i]>>c;
//            m[a[i]]+=c;
//            m[b[i]]+=c;
            g[a[i]].push_back({c,b[i]});
            g[b[i]].push_back({c,a[i]});
        }


        mx=0;
        for(itn i=1; i<=2*n; i++)
        {
//            cout<<"asw";
            sum=0;
            
            if(used[i]==false) dfs(i);
            mx=max(mx,sum);
        }
        cout<<mx<<endl;
        //<<"xas ";

    }

}
