代码

#include<cstdio>
#include<algorithm>
using namespace std; const int N = 200000;
int f[N + 5] , g[N + 5] , h[N + 5] , son[N + 5] , res[N + 5] , Maxl[N + 5] , Maxr[N + 5];
int tot = 1 , cnt , n , F , ans;
struct edge{
int to , nxt;
}e[N + 5]; inline void add(int x , int y) {e[++tot].to = y , e[tot].nxt = h[x] , h[x] = tot;}
inline int o(int x){return x == F ? g[x] : f[x];}
inline bool cmp(int x , int y) {return o(x) > o(y);} inline void getf(int u)
{
for(register int i = h[u]; i; i = e[i].nxt) getf(e[i].to);
cnt = F = 0;
for(register int i = h[u]; i; i = e[i].nxt) son[++cnt] = e[i].to;
sort(son + 1 , son + cnt + 1 , cmp);
for(register int i = 1; i <= cnt; i++) f[u] = max(f[u] , f[son[i]] + i);
} inline void getg(int u)
{
if (u > 1) son[cnt = 1] = F = u;
else cnt = F = 0;
for(register int i = h[u]; i; i = e[i].nxt) son[++cnt] = e[i].to;
sort(son + 1 , son + cnt + 1 , cmp); Maxl[0] = Maxr[cnt + 1] = 0;
for(register int i = 1; i <= cnt; i++) Maxl[i] = max(Maxl[i - 1] , o(son[i]) + i);
for(register int i = cnt; i >= 1; i--) Maxr[i] = max(Maxr[i + 1] , o(son[i]) + i); for(register int i = 1; i <= cnt; i++)
{
if (son[i] == u) continue;
g[son[i]] = max(Maxl[i - 1] , Maxr[i + 1] - 1);
}
res[u] = Maxl[cnt];
for(register int i = h[u]; i; i = e[i].nxt) getg(e[i].to);
} inline int read()
{
char ch = getchar();
int x = 0;
for(; ch < '0' || ch > '9'; ch = getchar());
for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
return x;
} int main()
{
freopen("news.in" , "r" , stdin);
freopen("news.out" , "w" , stdout);
n = read();
int fa;
for(register int i = 2; i <= n; i++) fa = read() , add(fa , i);
getf(1) , getg(1);
ans = 2e9;
for(register int i = 1; i <= n; i++) ans = min(res[i] , ans);
printf("%d\n" , ans + 1);
for(register int i = 1; i <= n; i++)
if (res[i] == ans) printf("%d " , i);
}

最新文章

  1. iOS的ATS配置 - 2017年前ATS规定的适配
  2. 数论 - Pairs(数字对)
  3. 非本地跳转之setjmp与longjmp
  4. Linux 命令 find
  5. ASP.NET(转自wiki)
  6. Tomcat连接池
  7. MySQL深入利用Ameoba实现读写分离
  8. redhat 下Redis安装
  9. redhat 挂载 iso文件 提示 mount :not a directory
  10. CentOS 添加本地yum源
  11. 微信小程序开发官方文档解读
  12. CesiumJS 添加会动的GIF
  13. LCT入门总结
  14. react事件绑定,事件传参,input单向数据绑定
  15. tensorflow--logistic regression
  16. php正则提取html图片(img)src地址与任意属性的方法
  17. IOS中的用户安全
  18. jQuery插件初级练习2
  19. 在element-ui的el-tree组件中用render函数生成el-button
  20. 三个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3

热门文章

  1. 关于Wegame页面空白的问题解决
  2. MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping
  3. Blender修改视野范围
  4. JDK中内嵌JS引擎介绍及使用
  5. 【企业流行新数仓】Day03:SuperSet图表,Ranger权限、脱敏、行级别过滤,Atlas元数据、查询和查看全表/字段血缘依赖,Zabbix告警
  6. JavaScript:操作符:赋值运算符和空赋值(??=)
  7. 【深入浅出 Yarn 架构与实现】4-2 RM 管理 Application Master
  8. 基于Linux下的Ubuntu操作系统常用命令
  9. Python网络爬虫get方法出现乱码的解决的三种方案
  10. win32com操作word API精讲&amp;项目实战 预告