第三题AC的代码 public class XiaoHongShu { static class Node{ int id, dist; public Node(){} public Node(int id, int dist){ this.id = id; this.dist = dist; } } static int res = 0; public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(), k = scanner.nextInt(); List<Node>[] g = new List[n]; for (int i = 0; i < n; i++) { g[i] = new ArrayList<>(); } for (int i = 0; i < n - 1; i++) { int x = scanner.nextInt() - 1, y = scanner.nextInt() - 1, dist = scanner.nextInt(); g[x].add(new Node(y, dist)); g[y].add(new Node(x, dist)); } for (int i = 0; i < n; i++) { dfs(g, i, -1, 0, k); } System.out.println((res - n) / 2); // -n 是为了去掉起点(x,x),/2是为了去重(x,y) (y,x) } 字数限制,dfs方法写在回复里 }
第三题事后想的代码,python,没测试过考场用例 n = 5 k=4 edges = [[0,1,3],[0,2,1],[0,3,2],[2,4,1]] graph = [[] for _ in range(n)] for edge in edges: graph[edge[0]].append([edge[1],edge[2]]) graph[edge[1]].append([edge[0],edge[2]]) global res res = 0 def find(node1,node2,parent,cur_sum): global res for nn in graph[node1]: node = nn[0] dis = nn[1] if node==parent: continue if node==node2: cur_sum+=dis if cur_sum<=k: res+=1 break else: find(node,node2,node1,cur_sum+dis) for i in range(n): for j in range(i+1,n): find(i,j,-1,0) print(res)