class planet:
    def __init__(self, name):
        self.name = name
        self.unionHead = None
        self.rank = 1
    def find(self):
        if self.unionHead == None:
            return self
        self.unionHead = self.unionHead.find()
        return self.unionHead
    def union(self, other):
        if self.rank < other.rank:
            other.union(self)
        else:
            other.find().unionHead = self.find()
            if self.rank == other.rank:
                self.rank = self.rank + 1
    def __str__(self):
        return self.name

class terminal:
    def __init__(self, end1, end2, distance):
        if end1 not in planets:
            planets[end1] = planet(end1)
        if end2 not in planets:
            planets[end2] = planet(end2)
        self.end1 = planets[end1]
        self.end2 = planets[end2]
        self.distance = float(distance)
    def getDistance(self):
        return self.distance
    def maybeAdd(self):
        if self.end1.find() != self.end2.find():
            self.end1.union(self.end2)
            return self.distance
        else:
            return 0
        

for _ in range(int(input())):
    planets = {}
    edges = []
    for edge in range(int(input())):
        e1, e2, dist = input().split()
        t = terminal(e1, e2, dist)
        edges.append(t)
        #edges.append(terminal(input().split()))
    edges.sort(key=terminal.getDistance)
    total = 0
#    valid = "connected"
    for edge in edges:
        total = total + edge.maybeAdd()
    print(total)
#    head = t.end1.find()
#    for p in planets.values():
#        if p.find() != head:
#            valid = "disconnected"
#    print(total, valid)
        
