luoguP3258 [JLOI2014]松鼠的新家 题解(树上差分)
P3258 [JLOI2014]松鼠的新家 题目
树上差分:树上差分总结
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iomanip>
#include<ctime>
#include<queue>
#include<stack>
#define rg register
#define lst long long
#define N 300050
using namespace std; int n,K,cnt,ans;
struct EDGE{
int to,nxt;
}edge[N<<];
int head[N],an[N];
int fa[N],v[N],deep[N];
int f[N][]; inline int read()
{
rg int s=,m=;rg char ch=getchar();
while(ch!='-'&&(ch<''||ch>''))ch=getchar();
if(ch=='-')m=-,ch=getchar();
while(ch>=''&&ch<='')s=(s<<)+(s<<)+ch-'',ch=getchar();
return s*m;
} inline void add(rg int p,rg int q)
{
edge[++cnt]=(EDGE){q,head[p]};
head[p]=cnt;
} void dfs(rg int now,rg int fm,rg int dep)
{
fa[now]=fm;deep[now]=dep;
f[now][]=fa[now];
for(rg int i=;i<=;++i)
f[now][i]=f[f[now][i-]][i-];
for(rg int i=head[now];i;i=edge[i].nxt)
{
rg int qw=edge[i].to;
if(qw!=fm)
dfs(qw,now,dep+);
}
} inline int lca(rg int p,rg int q)
{
if(deep[p]<deep[q])swap(p,q);
while(deep[p]>deep[q])
for(rg int i=;i>=;--i)
if(deep[f[p][i]]>=deep[q])
p=f[p][i];
while(p!=q)
{
for(rg int i=;i>=;--i)
if(f[p][i]!=f[q][i])
p=f[p][i],q=f[q][i];
if(fa[p]==fa[q])
p=q=fa[p];
}
return p;
} inline void Insert(rg int p,rg int q)
{
v[p]++,v[q]++;
rg int LCA=lca(p,q);
// printf("lca(%d,%d)=%d\n",p,q,LCA);
v[LCA]--,v[fa[LCA]]--;
} void sum(rg int now)
{
for(rg int i=head[now];i;i=edge[i].nxt)
{
rg int qw=edge[i].to;
if(qw!=fa[now])
{
sum(qw);
v[now]+=v[qw];
}
}
} int main()
{
n=read();
for(rg int i=;i<=n;++i)an[i]=read();
for(rg int i=;i<n;++i)
{
rg int p=read(),q=read();
add(p,q),add(q,p);
}
dfs(,,);
for(rg int i=;i<n;++i)
{
Insert(an[i],an[i+]);
}
// for(rg int i=\1;i<=n;++i)cout<<deep[i]<<" ";cout<<endl;
/* for(rg int i=1;i<=n;++i)
{
for(rg int j=0;j<=2;j++)
{
printf("f[%d][%d]=%d ",i,j,f[i][j]);
}
cout<<endl;
}
cout<<endl;*/
add(,);
sum();
for(rg int i=;i<=n;++i)v[an[i]]--;
for(rg int i=;i<=n;++i)printf("%d\n",v[i]);
return ;
}
luoguP3258 [JLOI2014]松鼠的新家 题解(树上差分)的更多相关文章
- [JLOI2014] 松鼠的新家 (lca/树上差分)
[JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在 ...
- P3258[JLOI2014]松鼠的新家(LCA 树上差分)
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- 洛谷P3258 [JLOI2014]松鼠的新家(树上差分+树剖)
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...
- BZOJ3631 [JLOI2014]松鼠的新家 【树上差分】
题目 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松鼠想 ...
- bzoj3631: [JLOI2014]松鼠的新家(树上差分)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3631 题目大意:给定含有n个顶点的树,给定走遍整棵树顺序的序列a[1],a[2],a[3 ...
- [Bzoj3631][JLOI2014]松鼠的新家 (树上前缀和)
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2350 Solved: 1212[Submit][Sta ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 题解
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- P3258 [JLOI2014]松鼠的新家题解
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有\(n\)个房间,并且有\(n-1\)根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树& ...
- BZOJ3631:[JLOI2014]松鼠的新家——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3631 https://www.luogu.org/problemnew/show/P3258 松鼠的 ...
随机推荐
- CSS样式表能否控制文字禁止选择,复制, 焦点
div中禁止文字被选择 在做div的点击计数事件时,遇到一个小问题. 因为div里面有文字,所以当点击多次时,特别是鼠标点的比较快的时候,文字会被选中. 查了下,用css和javascript可以实现 ...
- 2019-9-2-win10-UWP-MvvmLight入门
title author date CreateTime categories win10 UWP MvvmLight入门 lindexi 2019-09-02 12:57:38 +0800 2018 ...
- Git--01 基础 - 远程仓库的使用
目录 Git 基础 - 远程仓库的使用 远程仓库的使用 查看远程仓库 添加远程仓库 从远程仓库中抓取与拉取 推送到远程仓库 查看某个远程仓库 远程仓库的移除与重命名 Git 基础 - 远程仓库的使用 ...
- EBCDIC 870 Poland
Characters are shown with their equivalent Unicode codes.
- Minor GC与Full GC分别在什么时候发生?
Minor GC 当Eden区没有足够空间进行分配时,虚拟机就会进行一次Minor GC 新生代的垃圾收集动作,采用的是复制算法 对于较大的对象,在Minor GC的时候可以直接进入老年代 Full ...
- [HNOI2015]亚瑟王(概率dp)
题面太长了就不复制了,传送门 一道做了还是很懵逼的题目,感觉以后碰到类似的还是不会,果然HNOI题目很皮. 题解传送 补充一下吧.//感觉他的博客已经写得很好了......Orz 需要的可以两边一起看 ...
- HTML5知识点总结(一)
最近在复习前端的基础知识,在这里做一个总结,这是HTML5篇. 新特性 取消了过时的显示效果标记<font></font>和<center></center& ...
- Oracle RAC常用命令
Oracle Clusterware的命令集可以分为以下4种,其中用的最多的是crsctl和srvctl:节点层:osnodes olsnodes -n -i -s olsnodes -l -p 网络 ...
- webpackES6语法转ES5语法
安装babel-loader: npm install --save-dev babel-loader@7 babel-core babel-preset-es2015 webpack.config. ...
- setNeedsDisplay和setNeedsLayout方法
参考:https://blog.csdn.net/sunnyboy9/article/details/51458401 . UIView的setNeedsDisplay和setNeedsLayout方 ...