dfs求最长+路径记录(数组son记录)+路径比较
import java.util.*;
public class Main {
static int N = 10010;
static int root;
static int[] e = new int[N];
static int[] ne = new int[N];
static int[] h = new int[N];
static boolean[] st = new boolean[N];
static int idx;
static int[] son = new int[N];//当前节点的下一个节点
public static void add(int a,int b) {
e[idx] = b;
ne[idx] = h[a];
h[a] = idx ++;
}
public static int dfs(int u) { //返回深度
int maxlen = 0;
for (int i = h[u];i != -1;i = ne[i]) {
int j = e[i];
int len = dfs(j);
if (len > maxlen) {
maxlen = len;
son[u] = j;
} else if (len == maxlen) {
son[u] = Math.min(son[u],j);
}
}
return maxlen + 1;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Arrays.fill(h,-1);
Arrays.fill(son,-1);
for (int i = 0;i < n;i ++) {
int k = sc.nextInt();
while (k -- > 0) {
int x = sc.nextInt();
st[x] = true;
add(i,x);
}
}
//找树的根节点
for (int i = 0;i < n;i ++) {
if (!st[i])
root = i;
}
System.out.println(dfs(root));
System.out.print(root);
for (int i = son[root];i != -1;i = son[i])
System.out.print(" " + i);
}
}