voidchange(int x){ vis[x]++;//自己能管理自己,即自己是自己的祖先 while(x != 0) { x = fa[x];//一直向上找祖先 vis[x]++;//记录这个点作为祖先的个数 } } intmain(){ int n; scanf("%d", &n); for (int i = 1; i < n; i++) { scanf("%d", &fa[i]); } int q; scanf("%d", &q); while(q--) { int m; scanf("%d", &m); //注意vis数组要清空 memset(vis, 0, sizeof(vis)); for (int i = 1; i <= m; i++) { int x; scanf("%d", &x); change(x);//每输入一个数,进行标记 } int ans = 0; //因为是从小到大枚举的,所以不用取max for (int i = 1; i < n; i++) { if (vis[i] == m) ans = i; } printf("%d\n", ans); } return0; }