第一题双指针 第二题目做法复杂度爆炸,想不出来更好的: if __name__ == '__main__&(688)#39;: n = int(input()) mat = [[0x3f3f3f3f for _ in range(n + 1)] for _ in range(n + 1)] for i in range(n + 1): mat[i][i] = 0 for _ in range(1, n): a, b, c = list(map(int, input().split())) mat[a][b] = c mat[b][a] = c for i in range(n + 1): for j in range(n + 1): for k in range(n + 1): if mat[i][k] + mat[k][j] < mat[i][j]: mat[i][j] = mat[i][k] + mat[k][j] li_a = list(map(int, input().split()))[1:] li_b = list(map(int, input().split()))[1:] li_c = list(map(int, input().split()))[1:] result = [] for a in li_a: for b in li_b: for c in li_c: result.append((mat[a][b] + mat[b][c] + mat[a][c]) / 2) num = len(result) print(sum(result) / num)