[Agc029E]Wandering TKHS_树形dp_树上差分
Wandering TKHS
题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_e
数据范围:略。
题解:
好神啊
Orz司队
https://www.cnblogs.com/ivorysi/p/10157002.html
代码:
#include <bits/stdc++.h>
#define N 300010
using namespace std;
char *p1, *p2, buf[100000];
#define nc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1 ++ )
int rd() {
int x = 0, f = 1;
char c = nc();
while (c < 48) {
if (c == '-')
f = -1;
c = nc();
}
while (c > 47) {
x = (((x << 2) + x) << 1) + (c ^ 48), c = nc();
}
return x * f;
}
int head[N], to[N << 1], nxt[N << 1], tot;
inline void add(int x, int y) {
to[ ++ tot] = y;
nxt[tot] = head[x];
head[x] = tot;
}
int mx[N], sz[N], d[N], c[N], son[N];
void calc(int p, int fa, int v) {
son[p] = 1;
for (int i = head[p]; i; i = nxt[i]) {
if (to[i] != fa && to[i] < v) {
calc(to[i], p, v);
son[p] += son[to[i]];
}
}
}
void dfs(int p, int fa) {
mx[p] = max(mx[fa], p);
sz[p] = 1;
for (int i = head[p]; i; i = nxt[i]) {
if (to[i] != fa) {
dfs(to[i], p);
sz[p] += sz[to[i]], d[p] += d[to[i]];
}
}
if (mx[p] == p) {
calc(p, fa, mx[fa]);
d[p] = -sz[p];
}
if (mx[fa] == fa) {
d[p] += sz[p];
}
}
void dfs2(int p, int fa) {
if (fa) {
if (mx[p] == p) {
c[p] += son[p];
}
else if (mx[fa] == fa) {
c[p] -= son[p], c[p] += d[p];
}
c[p] += c[fa];
}
for (int i = head[p]; i; i = nxt[i]) {
if (to[i] != fa) {
dfs2(to[i], p);
}
}
}
int main() {
int n = rd();
for (int i = 1; i < n; i ++ ) {
int x = rd(), y = rd();
add(x, y), add(y, x);
}
dfs(1,0), dfs2(1,0);
for (int i = 2; i <= n; i ++ )
printf("%d ", c[i]);
return 0;
}
[Agc029E]Wandering TKHS_树形dp_树上差分的更多相关文章
- 算法笔记--树的直径 && 树形dp && 虚树 && 树分治 && 树上差分 && 树链剖分
树的直径: 利用了树的直径的一个性质:距某个点最远的叶子节点一定是树的某一条直径的端点. 先从任意一顶点a出发,bfs找到离它最远的一个叶子顶点b,然后再从b出发bfs找到离b最远的顶点c,那么b和c ...
- 【CF739B】Alyona and a tree(树上差分,二分,树形DP)
题意:给出一棵有根树,树上每个点.每条边都有一个权值. 现在给出“控制”的定义:对一个点u,设点v在其子树上,且dis(u,v)≤av,则称u控制v. 要求求出每个点控制了多少个点 n (1 ≤ n ...
- D6差分及树上差分
原谅我这篇博客拖了很久才写: 来到学校就和白痴一样缺了一世纪的课 上课特别懵:还有开学考枯了: 差分有列的差分,对于一段区间[l,r]进行修改,显然如果我们对于他的差分数组的l和r+1进行修改就可以了 ...
- Codechef Sad Pairs——圆方树+虚树+树上差分
SADPAIRS 删点不连通,点双,圆方树 非割点:没有影响 割点:子树DP一下 有不同颜色,所以建立虚树 在圆方树上dfs时候 如果当前点是割点 1.统计当前颜色虚树上的不连通点对,树形DP即可 2 ...
- 【BZOJ-4326】运输计划 树链剖分 + 树上差分 + 二分
4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 703 Solved: 461[Submit][Status] ...
- [luogu P3128][USACO15DEC]Max Flow [LCA][树上差分]
题目描述 Farmer John has installed a new system of pipes to transport milk between the stalls in his b ...
- 树上差分 (瞎bb) [树上差分][LCA]
做noip2015的运输计划写了好久好久写不出来 QwQ 于是先来瞎bb一下树上差分 混积分 树上差分有2个常用的功能: (1)记录从点i到i的父亲这条路径走过几次 (2)将每条路径(s,t ...
- [填坑]树上差分 例题:[JLOI2014]松鼠的新家(LCA)
今天算是把LCA这个坑填上了一点点,又复习(其实是预习)了一下树上差分.其实普通的差分我还是会的,树上的嘛,也是懂原理的就是没怎么打过. 我们先来把树上差分能做到的看一下: 1.找所有路径公共覆盖的边 ...
- 【NOIP2016】【LCA】【树上差分】【史诗级难度】天天爱跑步
学弟不是说要出丧题吗>>所以我就研究了1天lca又研究了1天tj然后研究了一天天天爱跑步,终于写了出来.(最后的平均用时为240ms...比学弟快了1倍...) 题意:给你颗树,然后有m个 ...
随机推荐
- 2019牛客暑期多校训练营(第六场)E 构造、原图是补图的同构图
https://ac.nowcoder.com/acm/contest/886#question 题意 问是否存在某个n个点的无向图G是其补图H的同构图,若存在输出G的邻接矩阵以及H关于G的映射. ...
- 在Android中使用OpenGL ES开发第(四)节:相机预览
笔者之前写了三篇Android中使用OpenGL ES入门级的文章,从OpenGL ES的相关概念出发,分析了利用OpenGL ES实现3D绘图的重要的两个步骤:定义形状和绘制形状,简单的绘制了一个三 ...
- anaconda安装和配置和基本使用
conda是个商业化公司,所以没有授权不能随便建立其镜像.虽说说的是发邮件询问基本上就能够拿到授权,然而现实是国内的各大开源镜像站都拿不到. 这个事情最近有进展了. 清华大学的镜像源已经拿到授权了 ( ...
- C语言指针方法对字符串进行去重
自己编写了3种方法,都是使用指针的.(在LR中编写的) 1.先在原字符串进行比较,然后再放入目标字符串 Action() { char *srt="aadfeedeewwffggecccew ...
- 【Phoenix】1、搭建 Phoenix 环境
Ps: 需要注意的是,我学习的时候,Elixir 是 1.8.1的版本,而 Phoenix 是 1.4.1的版本,对于其他版本,不一定正确. 1.安装 Phoenix 之前,先安装 Elixir. 2 ...
- 淘宝rem适配方案
/*px 转化换 rem ,转化是 10 .比如:你的设计图为750,那么就 750 / 75 = 10 rem.设计图中你量尺寸都要除 75 就是 rem值.再比如量的设计图按钮宽度 66px,那么 ...
- [oracle]TX行锁发生的常见场景(转贴)
TX行锁发生的常见场景: 1.当前会话要更新或删除的记录,已经被其他会话更新或删除. 2.对于表上有唯一索引的情况,多个会话插入或更新为相同的键值. 3.对于表上有位图索引的情况,多个会话即使更新不同 ...
- android: Android 权限管理小结
一. 概述 感谢郭神,自从Android6.0发布以来,在权限上做出了很大的变动,不再是之前的只要在manifest设置就可以任意获取权限,而是更加的注重用户的隐私和体验,不会再强迫用户因拒绝不该拥有 ...
- Kotlin入门-Android的基础布局
线性布局线性布局LinearLayout是最常用的布局,顾名思义,它下面的子视图像是用一根线串了起来,所以其内部视图的排列是有顺序的,要么从上到下垂直排列,要么从左到右水平排列.排列顺序只能指定一维方 ...
- js es6遍历对象的6种方法(应用中推荐前三种)
javaScript遍历对象总结 1.for … in 循环遍历对象自身的和继承的可枚举属性(循环遍历对象自身的和继承的可枚举属性(不含Symbol属性).). 2.使用Object.keys ...