Wandering TKHS

题目链接https://atcoder.jp/contests/agc029/tasks/agc029_e

数据范围:略。


题解

好神啊

Orz司队

https://www.cnblogs.com/ivorysi/p/10157002.html

代码

  1. #include <bits/stdc++.h>
  2.  
  3. #define N 300010
  4.  
  5. using namespace std;
  6.  
  7. char *p1, *p2, buf[100000];
  8.  
  9. #define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
  10.  
  11. int rd() {
  12. int x = 0, f = 1;
  13. char c = nc();
  14. while (c < 48) {
  15. if (c == '-')
  16. f = -1;
  17. c = nc();
  18. }
  19. while (c > 47) {
  20. x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
  21. }
  22. return x * f;
  23. }
  24.  
  25. int head[N], to[N << 1], nxt[N << 1], tot;
  26.  
  27. inline void add(int x, int y) {
  28. to[ ++ tot] = y;
  29. nxt[tot] = head[x];
  30. head[x] = tot;
  31. }
  32.  
  33. int mx[N], sz[N], d[N], c[N], son[N];
  34.  
  35. void calc(int p, int fa, int v) {
  36. son[p] = 1;
  37. for (int i = head[p]; i; i = nxt[i]) {
  38. if (to[i] != fa && to[i] < v) {
  39. calc(to[i], p, v);
  40. son[p] += son[to[i]];
  41. }
  42. }
  43. }
  44.  
  45. void dfs(int p, int fa) {
  46. mx[p] = max(mx[fa], p);
  47. sz[p] = 1;
  48. for (int i = head[p]; i; i = nxt[i]) {
  49. if (to[i] != fa) {
  50. dfs(to[i], p);
  51. sz[p] += sz[to[i]], d[p] += d[to[i]];
  52. }
  53. }
  54. if (mx[p] == p) {
  55. calc(p, fa, mx[fa]);
  56. d[p] = -sz[p];
  57. }
  58. if (mx[fa] == fa) {
  59. d[p] += sz[p];
  60. }
  61. }
  62.  
  63. void dfs2(int p, int fa) {
  64. if (fa) {
  65. if (mx[p] == p) {
  66. c[p] += son[p];
  67. }
  68. else if (mx[fa] == fa) {
  69. c[p] -= son[p], c[p] += d[p];
  70. }
  71. c[p] += c[fa];
  72. }
  73. for (int i = head[p]; i; i = nxt[i]) {
  74. if (to[i] != fa) {
  75. dfs2(to[i], p);
  76. }
  77. }
  78. }
  79.  
  80. int main() {
  81. int n = rd();
  82. for (int i = 1; i < n; i ++ ) {
  83. int x = rd(), y = rd();
  84. add(x, y), add(y, x);
  85. }
  86. dfs(1,0), dfs2(1,0);
  87. for (int i = 2; i <= n; i ++ )
  88. printf("%d ", c[i]);
  89. return 0;
  90. }

[Agc029E]Wandering TKHS_树形dp_树上差分的更多相关文章

  1. 算法笔记--树的直径 && 树形dp && 虚树 && 树分治 && 树上差分 && 树链剖分

    树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c ...

  2. 【CF739B】Alyona and a tree(树上差分,二分,树形DP)

    题意:给出一棵有根树,树上每个点.每条边都有一个权值. 现在给出“控制”的定义:对一个点u,设点v在其子树上,且dis(u,v)≤av,则称u控制v. 要求求出每个点控制了多少个点 n (1 ≤ n  ...

  3. D6差分及树上差分

    原谅我这篇博客拖了很久才写: 来到学校就和白痴一样缺了一世纪的课 上课特别懵:还有开学考枯了: 差分有列的差分,对于一段区间[l,r]进行修改,显然如果我们对于他的差分数组的l和r+1进行修改就可以了 ...

  4. Codechef Sad Pairs——圆方树+虚树+树上差分

    SADPAIRS 删点不连通,点双,圆方树 非割点:没有影响 割点:子树DP一下 有不同颜色,所以建立虚树 在圆方树上dfs时候 如果当前点是割点 1.统计当前颜色虚树上的不连通点对,树形DP即可 2 ...

  5. 【BZOJ-4326】运输计划 树链剖分 + 树上差分 + 二分

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 703  Solved: 461[Submit][Status] ...

  6. [luogu P3128][USACO15DEC]Max Flow [LCA][树上差分]

    题目描述 Farmer John has installed a new system of  pipes to transport milk between the  stalls in his b ...

  7. 树上差分 (瞎bb) [树上差分][LCA]

    做noip2015的运输计划写了好久好久写不出来   QwQ 于是先来瞎bb一下树上差分    混积分 树上差分有2个常用的功能: (1)记录从点i到i的父亲这条路径走过几次 (2)将每条路径(s,t ...

  8. [填坑]树上差分 例题:[JLOI2014]松鼠的新家(LCA)

    今天算是把LCA这个坑填上了一点点,又复习(其实是预习)了一下树上差分.其实普通的差分我还是会的,树上的嘛,也是懂原理的就是没怎么打过. 我们先来把树上差分能做到的看一下: 1.找所有路径公共覆盖的边 ...

  9. 【NOIP2016】【LCA】【树上差分】【史诗级难度】天天爱跑步

    学弟不是说要出丧题吗>>所以我就研究了1天lca又研究了1天tj然后研究了一天天天爱跑步,终于写了出来.(最后的平均用时为240ms...比学弟快了1倍...) 题意:给你颗树,然后有m个 ...

随机推荐

  1. FileInputStream读取的两种方法:逐字节读;以字节数组读取

    1:read() : 从输入流中读取数据的下一个字节,返回0到255范围内的int字节值.如果因为已经到达流末尾而没有可用的字节,则返回-1.在输入数据可用.检测到流末尾或者抛出异常前,此方法一直阻塞 ...

  2. pwrite,pread

    pwrite,pread,在多线程中读写文件使用,将lseek 和read 或write 合为一个原子操作(在执行的时候不会失去CPU). ssize_t pwrite(intfd, const vo ...

  3. 51nod 1060

    反素数定义:对于任意正整数 $n$, 其约数个数记为 $f(n)$, 如果某个正整数 $n$ 满足 对于任意正整数 $i, (0 < i < n)$, 都有 $f(i) < f(n) ...

  4. openssl 模块 安装 centso Ubuntu

    备忘: centos: yum install openssl-devel ubuntu: apt-get install libssl-dev 哎... 这玩意总是记不住. 每次都得搜索好麻烦.

  5. windows问题集合

    1.windows创建内核对象时系统会创建内核数据块,我们通过什么方式去创建,打开,操作这些数据块呢?微软是如何做的?如果是你又会如何做?(提示:内核句柄) 2.进程  发展历史(系统方面发展) 答: ...

  6. dubbo——高可用性

    一.zookeeper宕机 zookeeper注册中心宕机,还可以消费dubbo暴露的服务 健壮性: 监控中心宕掉不影响使用,只是丢失部分采样数据 数据库宕掉后,注册中心仍能通过缓存提供服务列表查询, ...

  7. SNMP 协议介绍 转载

    一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议& ...

  8. Python语法 - 推导式

    推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 列表推导式(list comprehension)最擅长的方式就是对整个列表分别做相同的操作,并且返回得到一个新的列 ...

  9. JS合并多个数组去重算法

    var arr1 = ['a','b']; var arr2 = ['a','c','d']; var arr3 = [1,'d',undefined,true,null]; //合并两个数组,去重 ...

  10. es搭建过程会存在的问题 针对6.x

    常见的四个基本错误 错误1 can not run elasticsearch as root 解决方案: 因为安全问题elasticsearch 不让用root用户直接运行,所以要创建新用户 第一步 ...