虽然是水题1A的感觉太爽了O(∩_∩)O~

题意相当于n-1次树上路径上每个点权值+1,最后问每个点的权值

本来想写线段树,写好了change打算框架打完了再来补,结果打完发现只是区间加和单点查

前缀和不要怂!!!

结果,,,change的长度让人怀疑写change的必要,,,mdzz懒得改了

 inline void change(int x,int y){a[x]++;a[y+]--;}

这道题注意要点:

每次都按照顺序加权值的话会导致多算端点的权值,解决方法很简单:算完以后把除出发点以外的所有点权值-1(因为题目保证了遍历每个点,所以除出发点以外每个点肯定被多算一次)

树链剖分好久没写了,主要部分没问题,就是关于高度的东西写成鬼畜了,没记住高度小的排在前面,导致调了几分钟样例

 #include <cstdio>
int n,m=,N=,p,q;
int to[],nex[],son[],bro[];
int fir[],size[],pos[],top[],h[],fa[];
int l[],a[],ans[],b[];
inline void add(int x,int y){to[++m]=y;nex[m]=fir[x];fir[x]=m;}
inline void change(int x,int y){a[x]++;a[y+]--;}
inline void swap(int &x,int &y){int t=x;x=y;y=t;}
int build(int now,int fat)
{
size[now]=;h[now]=h[fat]+;fa[now]=fat;
for(int i=fir[now];i;i=nex[i])
if(to[i]!=fat)
bro[to[i]]=son[now],son[now]=to[i],size[now]+=build(to[i],now);
return size[now];
}
void pou(int now,int to)
{
l[++N]=now;pos[now]=N;top[now]=to;
int max=son[now];
if(!max) return;
for(int i=bro[max];i;i=bro[i])
if(size[i]>size[max]) max=i;
pou(max,to);
for(int i=son[now];i;i=bro[i])
if(i!=max) pou(i,i);
}
void work(int x,int y)
{
while(top[x]!=top[y])
{
if(h[top[x]]<h[top[y]]) swap(x,y);
change(pos[top[x]],pos[x]);
x=fa[top[x]];
}
if(h[x]>h[y]) swap(x,y);
change(pos[x],pos[y]);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&b[i]);
for(int i=;i<n;i++)
scanf("%d%d",&p,&q),add(p,q),add(q,p);
build(,);
pou(,);
for(int i=;i<n;i++)
work(b[i],b[i+]);
for(int i=;i<=n;i++)
ans[l[i]]=ans[l[i-]]+a[i];
for(int i=;i<=n;i++)
printf("%d\n",ans[i]-+(i==b[]));
}

bzoj3631树链剖分的更多相关文章

  1. BZOJ3631(树链剖分)

    差不多可以说是树链剖分的模板题了,直接维护即可. #include <bits/stdc++.h> using namespace std; #define REP(i,n) for(in ...

  2. BZOJ3631 松鼠的新家(树链剖分)

    题目链接 松鼠的新家 差不多可以说是树链剖分的模板题了,直接维护即可. #include <bits/stdc++.h> using namespace std; #define REP( ...

  3. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  4. BZOJ 1984: 月下“毛景树” [树链剖分 边权]

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1728  Solved: 531[Submit][Status][Discu ...

  5. codevs 1228 苹果树 树链剖分讲解

    题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...

  6. 并查集+树链剖分+线段树 HDOJ 5458 Stability(稳定性)

    题目链接 题意: 有n个点m条边的无向图,有环还有重边,a到b的稳定性的定义是有多少条边,单独删去会使a和b不连通.有两种操作: 1. 删去a到b的一条边 2. 询问a到b的稳定性 思路: 首先删边考 ...

  7. 树链剖分+线段树 CF 593D Happy Tree Party(快乐树聚会)

    题目链接 题意: 有n个点的一棵树,两种操作: 1. a到b的路径上,给一个y,对于路径上每一条边,进行操作,问最后的y: 2. 修改某个条边p的值为c 思路: 链上操作的问题,想树链剖分和LCT,对 ...

  8. 树链剖分+线段树 HDOJ 4897 Little Devil I(小恶魔)

    题目链接 题意: 给定一棵树,每条边有黑白两种颜色,初始都是白色,现在有三种操作: 1 u v:u到v路径(最短)上的边都取成相反的颜色 2 u v:u到v路径上相邻的边都取成相反的颜色(相邻即仅有一 ...

  9. bzoj2243树链剖分+染色段数

    终于做了一道不是一眼出思路的代码题(⊙o⊙) 之前没有接触过这种关于染色段数的题目(其实上课好像讲过),于是百度了一下(现在思维能力好弱) 实际上每一段有用的信息就是总共有几段和两段各是什么颜色,在开 ...

随机推荐

  1. bzoj2928: [Poi1999]飞弹

    惨啊…… 被卡常是一种什么感受&…… 很明显的分治. 我们首先可以找到所有点中的最低点,然后对所有点进行一次极角排序,选取一个点使得他各侧飞弹和地堡一样多,并对两侧继续进行分治. 很容易证明这 ...

  2. js_继承

    一,js中对象继承 js中有三种继承方式 1.js原型(prototype)实现继承 复制代码代码如下: <SPAN style="<SPAN style="FONT- ...

  3. Windows Server 2008 双网卡同时上内外网 不能正常使用

    Windows server 2008 32位下,双网卡同时上内外网,并提供VPN服务,遇见的奇怪问题 1.服务器配置 2.网络配置 以太网适配器 内部连接: 连接特定的 DNS 后缀 . . . . ...

  4. 338. Counting Bits

    https://leetcode.com/problems/counting-bits/ 给定一个非负数n,输出[0,n]区间内所有数的二进制形式中含1的个数 Example: For num = 5 ...

  5. Android-RelativeLayout(相对布局)

    1.RelativeLayout(相对布局) 2.margin针对的是容器中的组件,而padding针对的是组件中的元素

  6. 怎么理解js中的事件委托

    怎么理解js中的事件委托 时间 2015-01-15 00:59:59  SegmentFault 原文  http://segmentfault.com/blog/sunchengli/119000 ...

  7. 【转载】SSM框架整合

    http://blog.csdn.net/gebitan505/article/details/44455235/ 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于20 ...

  8. css框架

    框架:如果你想在一个页面里面,嵌入另一个页面,就可以使用框架了. 框架分为两种: 一.iframe标签: 本页面中再嵌入另一个网页. iframe标签:浮动的框架,嵌入页面使用. 可以直接写在body ...

  9. 【转载】mysql慢查询

    mysql> show variables like 'long%'; 注:这个long_query_time是用来定义慢于多少秒的才算“慢查询” +-----------------+---- ...

  10. C++开始前篇,深入编译链接(补充2)

    在开始链接之前,我们先了解几个概念: 一>符号的概念. 我们知道,链接的最重要的是"对符号的重定位",而且上面提到了符号表,那什么是符号呢,在链接中,我们将函数和变量统称为符 ...