#定义并查集类
class UnionFind:
def __init__(self, n):
self.parents = list(range(n)) #初始化节点的父节点为其本身
self.size = [1] * n #初始化节点的深度为1
def find(self, i): #定义查找当前节点的父节点,如果不是根节点,则递归查找
if self.parents[i] != i:
self.parents[i] = self.find(self.parents[i])
return self.parents[i]
def union(self, i, j): #合并,首先查找两个节点的父节点,如果不是同一个父节点则将其中一个节点变为另一个的子节点的,并将另一个节点的深度加上该节点的深度
p1, p2 = self.find(i), self.find(j)
if p1 != p2:
self.parents[p1] = p2
self.size[p2] += self.size[p1]
def getMax(self): #取最大深度
return max(self.size)
def solution(): #问题解决
n_t = int(input())
for _ in range(n_t):
n_p = int(input())
pairs = []
ori2cur = {}
idx = 0
for _ in range(n_p):
x, y = map(int, input().split())
for xy in [x, y]:
if xy - 1 not in ori2cur: #这块还没搞明白
ori2cur[xy-1] = idx
idx += 1
pairs.append((ori2cur[x-1], ori2cur[y-1]))
uf = UnionFind(idx)
for a, b in pairs:
uf.union(a, b)
print(uf.getMax())
solution()
03-24
555
09-02
3754
11-05
326