BFS搜索解法:

import sys
from typing import List, Dict
from collections import deque  # 添加导入

sys.setrecursionlimit(1 << 25)

class State:
    def __init__(self, node, weight):
        # 当前节点 ID
        self.node = node
        # 从起点 s 到当前节点的权重和
        self.weight = weight

class Edge:
    def __init__(self, to: int, weight: int):
        self.to = to
        self.weight = weight

def bfs(graph: Dict[int, List[Edge]], start: int):
    queue = deque([State(start,0)])  # 改用双端队列
    visited = [False] * (len(graph) + 1)  # 由于题目节点从1开始,我们就也从1开始吧,0索引位置当占位符
    visited[start] = True
    while queue:
        state = queue.popleft()
        cur = state.node
        weight = state.weight
        for neighbor in graph[cur]:
            if not visited[neighbor.to]:
                queue.append(State(neighbor.to,weight+neighbor.weight))
                visited[neighbor.to] = True
    return state.weight


N = 0
input = []
for line in sys.stdin:
    a = line.strip().split()
    if len(a) == 1:
        N = int(a[0])
    if len(a) == 2:
        input.append([int(a[0]), int(a[1])])

# 构建邻接表graph   {"节点val":[Edge,Edge,...]}
graph = {i: [] for i in range(1, N + 1)}
for edge in input:
    i = edge[0]
    j = edge[1]
    graph[i].append(Edge(j,1))
    graph[j].append(Edge(i,1))

print(2*len(input)-bfs(graph, 1))