消息传递(news)题解
2024-10-21 03:21:10
代码
#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);
}
最新文章
- iOS的ATS配置 - 2017年前ATS规定的适配
- 数论 - Pairs(数字对)
- 非本地跳转之setjmp与longjmp
- Linux 命令 find
- ASP.NET(转自wiki)
- Tomcat连接池
- MySQL深入利用Ameoba实现读写分离
- redhat 下Redis安装
- redhat 挂载 iso文件 提示 mount :not a directory
- CentOS 添加本地yum源
- 微信小程序开发官方文档解读
- CesiumJS 添加会动的GIF
- LCT入门总结
- react事件绑定,事件传参,input单向数据绑定
- tensorflow--logistic regression
- php正则提取html图片(img)src地址与任意属性的方法
- IOS中的用户安全
- jQuery插件初级练习2
- 在element-ui的el-tree组件中用render函数生成el-button
- 三个通用的脚本,处理MySQL WorkBench导出表的JSON数据进SQLITE3
热门文章
- 关于Wegame页面空白的问题解决
- MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping
- Blender修改视野范围
- JDK中内嵌JS引擎介绍及使用
- 【企业流行新数仓】Day03:SuperSet图表,Ranger权限、脱敏、行级别过滤,Atlas元数据、查询和查看全表/字段血缘依赖,Zabbix告警
- JavaScript:操作符:赋值运算符和空赋值(??=)
- 【深入浅出 Yarn 架构与实现】4-2 RM 管理 Application Master
- 基于Linux下的Ubuntu操作系统常用命令
- Python网络爬虫get方法出现乱码的解决的三种方案
- win32com操作word API精讲&;项目实战 预告