问题原因
在逛了一圈帖子之后发现可能是dfs递归写法带来的栈溢出问题
解决方案
将dfs递归写法改为dfs栈的写法
这里注意要倒序推入栈中,否则会先访问值最大的节点,不符合题意
参考代码如下:
private void dfs(Set<Integer>[] edges) {
Deque<Integer> stack = new LinkedList<>();
stack.push(1);
while (!stack.isEmpty()) {
int u = stack.pop();
if (visited[u]) {
continue;
}
visited[u] = true;
fastWriter.print(u + " ");
List<Integer> children = new ArrayList<>(edges[u]);
children.sort(Collections.reverseOrder());
for (int v : children) {
if (!visited[v]) {
stack.push(v);
}
}
}
}