bzoj3631 松鼠的新家
Description
Input
Output
tarjan离线求出ai和ai+1的lca并在树上差分记录ai和ai+1间的路径,第二次dfs由差分求出答案。
#include<cstdio>
const int N=;
int n,a,b;
int nx[N*],es[N*],e0[N],ep=;
int dep[N],fa[N],f[N],as[N],ar[N],s[N],ans[N];
bool d[N];
int read(){
int x=,c=getchar();
while(c>''||c<'')c=getchar();
while(c>=''&&c<='')x=x*+c-'',c=getchar();
return x;
}
int stk[];
void print(int x){
int p=;
if(!x)stk[p++]=;
while(x){
stk[p++]=x%;
x/=;
}
for(--p;~p;--p)putchar(stk[p]+'');
putchar();
}
int get(int x){
int a=x,c;
while(a!=f[a])a=f[a];
while(a!=(c=f[x]))f[x]=a,x=c;
return a;
}
void dfs(int w,int pa,int de){
d[w]=;
fa[w]=pa;
dep[w]=de++;
if(d[w-]){
int c=get(w-);
s[w]++;s[w-]++;
s[c]--;s[fa[c]]--;
}
if(d[w+]){
int c=get(w+);
s[w]++;s[w+]++;
s[c]--;s[fa[c]]--;
}
for(int i=e0[w];i;i=nx[i]){
int u=es[i];
if(u==pa)continue;
dfs(u,w,de);
f[u]=w;
}
}
int dfs2(int w){
int v=s[w];
for(int i=e0[w];i;i=nx[i]){
int u=es[i];
if(u==fa[w])continue;
v+=dfs2(u);
}
ans[w]=v-(w>&&w<=n);
return v;
}
int main(){
n=read();
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=n;i++)as[i]=read();
for(int i=;i<=n;i++)ar[as[i]]=i;
for(int i=;i<n;i++){
a=ar[read()];b=ar[read()];
es[ep]=b;nx[ep]=e0[a];e0[a]=ep++;
es[ep]=a;nx[ep]=e0[b];e0[b]=ep++;
}
dfs(,,);
dfs2();
for(int i=;i<=n;i++)print(ans[ar[i]]);
return ;
}
bzoj3631 松鼠的新家的更多相关文章
- BZOJ3631 松鼠的新家(树链剖分)
题目链接 松鼠的新家 差不多可以说是树链剖分的模板题了,直接维护即可. #include <bits/stdc++.h> using namespace std; #define REP( ...
- 【BZOJ3631】松鼠的新家 树链剖分
BZOJ3631 松鼠的新家 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- 【BZOJ-3631】松鼠的新家 树形DP?+ 倍增LCA + 打标记
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1231 Solved: 620[Submit][Stat ...
- 【bzoj3631】[JLOI2014]松鼠的新家
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松 ...
- 【bzoj3631】[JLOI2014]松鼠的新家 LCA+差分数组
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀请小熊维尼前来 ...
- BZOJ3631:[JLOI2014]松鼠的新家——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3631 https://www.luogu.org/problemnew/show/P3258 松鼠的 ...
- BZOJ3631 [JLOI2014]松鼠的新家 【树上差分】
题目 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松鼠想 ...
- 刷题总结——松鼠的新家(bzoj3631)
题目: Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上. ...
- [BZOJ3631]:[JLOI2014]松鼠的新家(LCA+树上差分)
题目传送门 题目描述: 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在“树”上.松鼠想邀 ...
随机推荐
- netstat 问题处理
MySQL SQL Writing to net Creating sort index StatisticsPreparing
- bjui的ajax form不使用validate的表单验证
当form使用data-toggle为ajaxform或者是validate的时候,表单的onSubmit()和submit按钮的click()事件明明return false:还是会提交. 如果将d ...
- L241
Parents, try to get enough sleep to role model good habits to children. Bessesen notes that some med ...
- RF layout check list
Analog-digital circuit 1. Insure C36 and C33 placed next to each other to avoid open stubs 2. Keep U ...
- oracle数据类型及其隐式转换
oracle有三种最基本的数据类型,即字符型.数值型.日期型. oracle提供的单行函数中,针对不同的数据类型,提供大量实用的函数,同时提供一系列数据类型转换函数,如下: 1)to_char ...
- Ubuntu终端点击确定按钮的方法
Ubuntu终端里出现需要点击 确定 按钮的时候,直接鼠标点击 确定 是不生效的,这个时候需要利用tab键选中这个 确定 按钮,然后回车键就可以了.
- 【转载】Java Web的web.xml文件作用及基本配置
其实web.xml就是asp.net的web.config一个道理. 说明: 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的. web.xml文件是用来 ...
- 第三课 操作系统开发之x86模拟环境搭建
前面我们讲解了主引导程序的加载过程,并且制作了虚拟软盘a.img,最终这个主引导程序也在机器中成功运行了,但是实际开发的时候,并不会如此简单,免不了调试过程,如果还像上一节中直接将软盘放到机器中去加载 ...
- CSS的使用
1.行内样式/内联样式 特点:在具体的HTML标签中引入CSS代码 语法:所有的HTML标签都具有一个style属性,属性值就可以使用CSS样式规则 <标签 style="CSS样式规 ...
- stm32 继电器的配置
你可以把继电器当成一个led来控制,只不过就是电路图不一样,但配置原理是一样的, 控制相对应的GPIO口,推挽输出,就行了,然后仿真一下就会发现哒哒哒的声音.