• 思路: 任选一个中的点做为树的根节点,对于所有其他的在中的节点,我们只需要选择连接该节点与其父节点的边,就可以满足题目要求。

  • 代码:


def solve(testcase):
    n, m = MI()
    adj = [[] for _ in range(n)]
    edges = []

    for i in range(n - 1):
        u, v = GMI()
        adj[u].append((v, i))
        adj[v].append((u, i))
        edges.append((u, v))
    
    A = LII()
    for i in range(m):
        A[i] -= 1
    B = [False for _ in range(n)]
    for a in A:
        B[a] = True
    
    print(m - 1)
    q = deque()
    q.append((A[0], -1))
    while q:
        u, fa = q.popleft()
        for v, idx in adj[u]:
            if v != fa:
                q.append((v, u))
                if B[v]:
                    a, b = edges[idx]
                    print(a + 1, b + 1)

for testcase in range(1):
    solve(testcase)