虽然是水题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. Sicily 1031: Campus (最短路)

    这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...

  2. jdbc链接数据库的三种方式

    /** * jdbc连接数据库 * @author APPle * */ public class Demo1 { //连接数据库的URL private String url = "jdb ...

  3. EndNote(三)之中文引文导入方式

    上一篇文章讲了Web of Science,PubMed的引文如何导入到EndNote中.这次,写一下常用的中文文献查找网站的引文如何导入EndNote. 本人常用的中文文献查找网站,主要是知网(CN ...

  4. linux下编译时,链接math库

    在gcc下用到数学函数,如sqrt.在gcc时要加上 -lm 参数,这样告诉编译器我要用到数学函数了 . 如:gcc a.c -o a -lm 当在用Eclipse编译使用数学函数的C语言程序时,如s ...

  5. cf591d

    题意:给出船的最大速度v,起点,终点.风在前t秒是一个方向,t秒后就一直是第二个方向.两个方向已知. 船速永远大于风速.问船在自由掌握速度和行驶方向的情况下,最快多久到终点. 分析:首先排除一种方法, ...

  6. js_apply与call

    在ECAMScript3给Function的原型定义了两个方法,它们是Function.prototype.call和Function.prototype.apply. 本文详细介绍了apply与ca ...

  7. NIO及Reactor模式

    关于Nio Java NIO即Java Non-blocking IO(Java非阻塞I/O),是Jdk1.4之后增加的一套操作I/O工具包,又被叫做Java New IO. Nio要去解决的问题 N ...

  8. 重写jquery的ajax方法

    //首先备份下jquery的ajax方法 var _ajax=$.ajax; //重写jquery的ajax方法 $.ajax=function(opt){ //备份opt中error和success ...

  9. redhat 配置本地yum源163yum源epel 源,无需卸载yum!无须拷贝ISO,愿网上少一点垃圾教程误人子弟

    都知道redhat不收费,但是其yum服务是要收费的,不想出钱那就自己配置yum源就好了. 首先,博主之前也没用过redhat,第一次用yum装包的时候提示什么没注册之类的,balaba一大堆,然后就 ...

  10. iOS10 推送必看(基础篇)

    虽然这篇文章比较长,也不好理解,但是还是建议大家收藏,以后用到的时候,可以看看,有耐心的还是读一读. 这篇文章开始,我会跟大家好好讲讲,苹果新发布的iOS10的所有通知类. 一.创建本地通知事例详解: ...