题目大意:一棵树,以一定顺序走完n个点,求每个点经过多少遍

可以树链剖分,也可以直接在树上做差分序列的标记

后者打起来更舒适一点。。

具体实现:

先求x,y的lca,且dep[x]<dep[y],

如果在一棵子树下的一条链上,那么lca就是x

则g[fa[x]]--; g[y]++;

如果在一棵子树的两条分枝上,那么lca设为z

g[x]++, g[y]++, g[z]--, g[fa[z]]--

最后从叶子节点加回根节点,加法是差分序列的那种加法

因为z会加左右两边,多加了1,所以要减去。

 #include<stdio.h>
 #include<algorithm>
 using namespace std;
 ;
 struct node{
     int to,next;
 }e[maxn*];
 ],w[maxn],f[maxn],tot,logn;

 void insert(int u, int v){
     e[++tot].to=v; e[tot].next=head[u]; head[u]=tot;
 }

 void dfs(int u, int f, int d){
     dep[u]=d; fa[u][]=f;
     ; i<=logn; i++) fa[u][i]=fa[fa[u][i-]][i-];
     for (int i=head[u]; i; i=e[i].next)
         );
 }

 void lca(int u, int v){
     if (dep[u]<dep[v]) swap(u,v);
     int x=u,y=v;
     while (dep[u]>dep[v]){
         ; i--)
             if (dep[fa[u][i]]>dep[v])
                 u=fa[u][i];
         u=fa[u][];
     }
     if (u==v){  //在某条链上
         w[fa[u][]]--;
         w[x]++;
         return;
     }
     ; i--)  //在分叉口上
         if (fa[u][i]!=fa[v][i]){
             u=fa[u][i];
             v=fa[v][i];
         }
     u=fa[u][];
     w[x]++; w[y]++;
     w[u]--; w[fa[u][]]--;
     return;
 }

 void get_ans(int u){
     f[u]=w[u];// printf("  %d\n", w[u]);
     for (int i=head[u],v; i; i=e[i].next){
         ]) continue;
         get_ans(e[i].to);
         f[u]+=f[v];
     }
 }

 int main(){
     scanf("%d", &n);
     ; i<=n; i++) scanf(; <<logn)<n) logn++;
     ,u,v; i<n; i++) scanf(,a[]);
     dfs(,,);
     ; i<=n; i++){
         lca(a[i-],a[i]);
     }
     get_ans(a[]);
     ; i<=n; i++) printf(])?f[i]:f[i]-);
     ;
 }

bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)的更多相关文章

  1. 【bzoj3631】[JLOI2014]松鼠的新家 LCA+差分数组

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀请小熊维尼前来 ...

  2. bzoj3631 [JLOI2014]松鼠的新家——树上差分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3631 树上差分:注意路径的结尾被多算了一次,最后要减去(不能提前减). 代码如下: #inc ...

  3. [JLOI2014] 松鼠的新家 (lca/树上差分)

    [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在 ...

  4. P3258[JLOI2014]松鼠的新家(LCA 树上差分)

    P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...

  5. [Bzoj3631][JLOI2014]松鼠的新家 (树上前缀和)

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2350  Solved: 1212[Submit][Sta ...

  6. [BZOJ3631]:[JLOI2014]松鼠的新家(LCA+树上差分)

    题目传送门 题目描述: 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...

  7. BZOJ3631 [JLOI2014]松鼠的新家 【树上差分】

    题目 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松鼠想 ...

  8. BZOJ 3631: [JLOI2014]松鼠的新家 树上差分 + LCA

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...

  9. bzoj3631[JLOI2014 松鼠的新家 倍增lca+差分

    裸的树上差分+倍增lca 每次从起点到终点左闭右开,这就有一个小技巧,要找到右端点向左端点走的第一步,然后差分就好了 #include<cstdio> #include<cstrin ...

随机推荐

  1. Visual Studio Emulator for Android 的安装与使用 感觉最干净好看的模拟器.

    Step1 win8+ 6G+ 添加删除程序\ hyper  创建虚拟机 安装visual studio android 模拟器, 自带三个模拟器 使用管理员打开模拟器 参考文献 Visual Stu ...

  2. MongoDB学习笔记

    MongoDB的学习目标(v.3.4.0) 1.MongoDB的概念,非关系型数据库NOSQL 2.学会MongoDB的搭建 3.熟悉MongoDB使用 最基本的文档的读写更新删除 各种不同类型的索引 ...

  3. JS中定义对象原型的两种使用方法

    第一种: function Person() { this.username = new Array(); this.password = "123"; } Person.prot ...

  4. there's no qt version assigned to this project for platform

    VS+Qt编译一个新建的项目报there's no qt version assigned to this project for platform xxx的错误. 解决方案: 打开Qt_vs_add ...

  5. 【笔记】读取properties文件

    package com.bshinfo.el.userInfo.util; import java.io.BufferedReader; import java.io.File; import jav ...

  6. C#并行

         /// <summary>         ///该实现方式并不是最高效的         ///只是举个例子,说明用锁来保护共享状态         /// </summ ...

  7. CentOS系统常用基本命令&Centos 7 命令变化

    一:查看cpu信息more /proc/cpuinfo | grep "model name"  grep "model name" /proc/cpuinfo ...

  8. 一、常见PHP网站安全漏洞

    对于PHP的漏洞,目前常见的漏洞有五种.分别是Session文件漏洞.SQL注入漏洞.脚本命令执行漏洞.全局变量漏洞和文件漏洞.这里分别对这些漏洞进行简要的介绍. 1.session文件漏洞 Sess ...

  9. JS技巧

    2016-08-09 200多个js技巧代码(Down) word下载 200多个js技巧代码 目录 1.文本框焦点问题... 6 2.网页按钮的特殊颜色... 6 3.鼠标移入移出时颜色变化... ...

  10. ghoest32 不重启电脑手动备份系统为.gho

    备份系统我们一般使用DOS之家的ghoest备份工具,但备份必须是重启电脑在DOS命令行下,其实,可以不重启电脑备份系统,也就是手动备份系统.DOS之家用的ghoest本质也是赛门铁克公司出的ghoe ...