CF1009F Dominant Indices

给定一棵以 \(1\) 为根的树,统计每个节点的子树中所有点到该点距离相同的最多的距离,如果相等选择较小的

\(n\leq10^6\)

长链剖分,dp


APIO2019上讲的……

首先可以设计一个时空 \(O(n^2)\) 的dp,令 \(f_{u,\ k}\) 表示以 \(u\) 的子树内与它距离为 \(k\) 的点的个数,转移即为 \(f_{u,\ k}=\sum{f_{v,\ k-1}}\) ,算答案直接统计即可

这种问题的解法是用长链剖分的套路,先 \(O(1)\) 继承长儿子的贡献,合并转移剩下儿子的贡献

考虑这种做法的时间复杂度,每条长链只会被遍历一次,而长链点数之和是 \(O(n)\) 的,因此时空复杂度 \(O(n)\)

有一种较为优秀的实现方法是开内存池,将 \(f_u\) 看做指针,将 \(f_{son_u}\) 赋值 \(f_u+1\) 快速继承

此题 \(f_{u,\ ans_u}=1\) 需要特判

时间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
using namespace std;const int maxn = 1e6 + 10;
int buf_dp[maxn], *dp[maxn], *it = buf_dp;
int n, m, h[maxn], len[maxn], son[maxn], ans[maxn];struct edges {int nxt, to;
} e[maxn << 1];void addline(int u, int v) {static int cnt;e[++cnt] = edges{h[u], v}, h[u] = cnt;
}void dfs(int u, int f) {for (int i = h[u]; i; i = e[i].nxt) {int v = e[i].to;if (v != f) {dfs(v, u);if (len[son[u]] < len[v]) son[u] = v;}}len[u] = len[son[u]] + 1;
}void DP(int u, int f) {*dp[u] = 1;if (son[u]) {dp[son[u]] = dp[u] + 1;DP(son[u], u), ans[u] = ans[son[u]] + 1;}for (int i = h[u]; i; i = e[i].nxt) {int v = e[i].to;if (v != f && v != son[u]) {dp[v] = it, it += len[v], DP(v, u);for (int j = 1; j <= len[v]; j++) {dp[u][j] += dp[v][j - 1];if (dp[u][j] > dp[u][ans[u]] || (dp[u][j] == dp[u][ans[u]] && j < ans[u])) {ans[u] = j;}}}}if (dp[u][ans[u]] == 1) ans[u] = 0;
}int main() {scanf("%d", &n);for (int i = 1; i < n; i++) {int u, v;scanf("%d %d", &u, &v);addline(u, v), addline(v, u);}dfs(1, 0);dp[1] = it, it += len[1];DP(1, 0);for (int i = 1; i <= n; i++) {printf("%d\n", ans[i]);}return 0;
}

转载于:https://www.cnblogs.com/Juanzhang/p/10920553.html

CF1009F Dominant Indices相关推荐

  1. cf1009F. Dominant Indices

    cf1009F. Dominant Indices 题意: 1号节点为根,问对于以每个点为根的子树种,求某个深度节点最多的层数.如果多个相等,输出深度小的. 题解: 直接dsu就完事了,相当于是求子树 ...

  2. 【luogu CF1009F】Dominant Indices(长链剖分优化DP)

    Dominant Indices 题目链接:luogu CF1009F 题目大意 给你一棵以 1 为根的树,设 d(u,x) 为 u 子树总到 u 距离为 x 的点数. 然后要你对于每个点 x 都要求 ...

  3. 【CF1009F】 Dominant Indices (长链剖分+DP)

    题目链接 \(O(n^2)\)的\(DP\)很容易想,\(f[u][i]\)表示在\(u\)的子树中距离\(u\)为\(i\)的点的个数,则\(f[u][i]=\sum f[v][i-1]\) 长链剖 ...

  4. 【Cf Edu #47 F】Dominant Indices(长链剖分)

    要求每个点子树中节点最多的层数,一个通常的思路是树上启发式合并,对于每一个点,保留它的重儿子的贡献,暴力扫轻儿子将他们的贡献合并到重儿子里来. 参考重链剖分,由于一个点向上最多只有$log$条轻边,故 ...

  5. Dominant Indices(CF 1009 F)

    前言 记录一下长链剖分的小技巧 题目相关 链接 题目大意 一棵nnn个节点的树,定义fi,jf_{i,j}fi,j​为与iii号点距离为jjj的节点数量,对于每个iii求出一个最小的jjj满足fi,j ...

  6. [dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)

    文章目录 前言 树上启发式合并 引入 算法思想 时间复杂度 模板 练习 例题:CF600E Lomsat gelral solution code CF208E Blood Cousins solut ...

  7. ZJOI2019一轮停课刷题记录

    Preface 菜鸡HL终于狗来了他的省选停课,这次的时间很长,暂定停到一试结束,不过有机会二试的话还是可以搞到4月了 这段时间的学习就变得量大而且杂了,一般以刷薄弱的知识点和补一些新的奇怪技巧为主. ...

  8. 树链剖分之长链剖分 详解 题目整理

    树链剖分 题目中出现的树链剖分一般分为两种,重链剖分和长链剖分 重链剖分:选择子树最大的儿子, 将其归入当前点所在 的同一条重链 长链剖分:选择向下能达到的深 度最深的儿子,将其归 入当前点所在的同一 ...

  9. Educational Codeforces Round 47 (Div 2) (A~G)

    目录 Codeforces 1009 A.Game Shopping B.Minimum Ternary String C.Annoying Present D.Relatively Prime Gr ...

  10. dsu on tree 题集 + ac代码

    文章目录 **入门讲解** **[600E - Lomsat gelral](https://codeforces.ml/problemset/problem/600/E)** **[树上数颜色](h ...

最新文章

  1. 神经网络反向传播梯度计算数学原理
  2. spi flash偶尔出现写入错误的情况
  3. PAT甲级1081 Rational Sum:[C++题解]分数求和、辗转相除法求最大公约数、long long有一个数据溢出
  4. dup和dup2以及cat函数函数
  5. word2vec中文相似词计算和聚类的使用说明及c语言源码
  6. 带有示例的Python列表reverse()方法
  7. 《数据中台:让数据用起来》读书笔记
  8. 微课|玩转Python轻松过二级(2.4节):常用内置函数用法精要1
  9. Arcgis Javascript那些事儿(十一)--网络分析服务使用
  10. 国家开放大学2021春1040公司概论题目
  11. python系统学习_【Python系统学习】基础篇
  12. 单元货格式自动化立体仓库AR/RS货架 高效的货位管理及空间利用率的使用
  13. Educoder jQuery 入门
  14. cpuz测试分数天梯图_cpubenchmark(2020电脑cpu性能天梯图)
  15. Java8 Collectors.toMap的key重复
  16. HTML做一个简单的页面(纯html代码)地球专题学习网站
  17. 同一个人两次被雷电击中,张益唐攻克世纪难题朗道-西格尔零点猜想?
  18. 笔记本驱动图标消失怎么办
  19. TCP/IP卷一:20---链路层之(环回地址)
  20. 文件末尾eof_什么是EOF(文件末尾)? PHP,C ++,C,Python,Java的示例

热门文章

  1. 医学图像处理(三)ABIDE数据集下载
  2. html的视频字幕制作步骤,十大字幕制作软件
  3. 改造:Ueditor编辑器插入外链视频支持手机播放和上传本地音乐
  4. OFFPIPE 海底管道铺设计算分析软件
  5. cpu性能测试软件 国际象棋,国际象棋测试
  6. win7 计算机设置命令,Win7设置开机启动项命令的方法
  7. 118、交换机配置规范
  8. SAP 上线 新旧科目映射 辅助核算
  9. 常见的几种锁(互斥锁,自旋锁,乐观锁,悲观锁)
  10. blockquote