bzoj3631
其实这道题其实可以转化为这样一个问题
给定n-1对点,将这两点x,y间简单路径上的点(包括起点终点)权值+1
(最后再把除了起点外的点的权值-1,注意终点没糖吃)
求每个点的权值
首先想到的是先找LCA然后暴力的对权值加,显然这样效率不够好
想到了树状数组完成区间修改和单点求值,是先将[l,r]中a[l]++,然后a[r+1]--;
这样就避免了对每个数都修改;
以此类推,我们可以假定路径使x-->root-->y上的点+1,
这样每个点的权值即为其所在子树和
设lca(x,y)=z 同样的道理,我们只要对a[x]++,a[y]++,然后对a[z]--,a[fa[z]]--
因为每个点的权值即为其所在子树和,所以只有x-->y的简单路径上的点权值+1了
这样的话我们可以做一遍LCA-tarjan就可以搞出来了(当然也可以再单独扫一遍)
type node=record
po,next:longint;
can:boolean;
end; var a,q:array[..] of node;
fa,f,p,w,ans,g:array[..] of longint;
v:array[..] of boolean;
st,i,j,n,m,x,y,t:longint; function getf(x:longint):longint;
begin
if fa[x]<>x then fa[x]:=getf(fa[x]);
exit(fa[x]);
end; procedure addq(x,y:longint);
begin
inc(m);
q[m].po:=y;
q[m].next:=w[x];
w[x]:=m;
end; procedure add(x,y:longint);
begin
inc(t);
a[t].po:=y;
a[t].next:=p[x];
p[x]:=t;
end; procedure tarjan(x:longint);
var i,y,z:longint;
begin
i:=p[x];
v[x]:=true;
while i<> do
begin
y:=a[i].po;
if not v[y] then
begin
f[y]:=x;
tarjan(y);
fa[y]:=x;
end;
i:=a[i].next;
end;
i:=w[x];
while i<>- do
begin
y:=q[i].po;
if v[y] and not q[i].can then
begin
z:=getf(y);
q[i].can:=true;
q[i xor ].can:=true;
inc(g[z]);
inc(g[f[z]]);
end;
i:=q[i].next;
end;
ans[x]:=ans[x]-g[x];
ans[f[x]]:=ans[f[x]]+ans[x];//做到这已经说明x的子树已经被访问完了,x的权值已经确定,直接加即可,不需要再dfs一遍
end; begin
m:=-;
fillchar(w,sizeof(w),);
readln(n);
read(x);
st:=x;
ans[x]:=;
for i:= to n- do
begin
read(y);
addq(x,y);
addq(y,x);
inc(ans[y]);
if i<>n- then inc(ans[y]);
x:=y;
end;
for i:= to n- do
begin
readln(x,y);
add(x,y);
add(y,x);
end;
for i:= to n do
fa[i]:=i; tarjan();
for i:= to n do
begin
if i<>st then dec(ans[i]);
writeln(ans[i]);
end;
end.
bzoj3631的更多相关文章
- 【BZOJ3631】松树的新家 树链剖分
BZOJ3631 松树的新家 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- 【BZOJ3631】松鼠的新家 树链剖分
BZOJ3631 松鼠的新家 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- [BZOJ3631][JLOI2014]松鼠的新家(树链剖分)
[BZOJ3631] 树剖模板题了, Code #include <cstdio> #include <algorithm> #define MID int mid=(l+r) ...
- bzoj3631树链剖分
虽然是水题1A的感觉太爽了O(∩_∩)O~ 题意相当于n-1次树上路径上每个点权值+1,最后问每个点的权值 本来想写线段树,写好了change打算框架打完了再来补,结果打完发现只是区间加和单点查 前缀 ...
- bzoj3631: [JLOI2014]松鼠的新家(LCA+差分)
题目大意:一棵树,以一定顺序走完n个点,求每个点经过多少遍 可以树链剖分,也可以直接在树上做差分序列的标记 后者打起来更舒适一点.. 具体实现: 先求x,y的lca,且dep[x]<dep[y] ...
- BZOJ3631: [JLOI2014]松鼠的新家
传送门 树上的差分优化,很简单的一道题,应该属于NOIP2015TGD2T3的子问题. //BZOJ 3631 //by Cydiater //2016.10.25 #include <iost ...
- 【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]松鼠的新家 题解
题目大意: 给你一棵树,要从编号为a[1]的节点走到编号为a[2]的节点再走到编号为a[3]的节点……一直走到编号为a[n]的节点.问每个节点最少访问多少次. 思路: 将其进行轻重链剖分,则从a[i] ...
随机推荐
- 使用jquery.validate.js实现boostrap3的校验和验证
使用jquery.validate.js实现boostrap3的校验和验证 boostrap3验证框架 jquery.validate.js校验表单 >>>>>>& ...
- winform windowsmediaplayer的属性
首先将C:\WINDOWS\system32下的wmp.dll应用到项目中: WMPLib.WindowsMediaPlayerClass player = new WMPLib.WindowsMed ...
- [解答]对‘’未定义的引用 collect2: 错误: ld 返回 1
写的makefile适用于32位,但是放到64位机器上make就有问题. 需要在makefile中gcc -o....的结尾加上-pthread,例如: bloomfilter.o: bloomfil ...
- Git命令详解【2】
git的工作区 git 安装 sudo apt-get insall git 查看git 版本 git --version git的配置 #配置用户名 git config --global ...
- PC110305/UVA10188
根据我的规律,每天solved3题就感觉不行了~但是今天好像做水题做上瘾了,不过PC的题目尽管水,水得还是可以让人有进步. 这题OJ自动测评真心坑,题目看起来十分简单,测评返回三种可能: Accept ...
- 《ln命令》-linux命令五分钟系列之十八
本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...
- 【elasticsearch】(2)centos7 超简单安装elasticsearch 的监控、测试的集群工具elasticsearch head
elasticsearch-head是elasticsearch(下面称ES)比较普遍使用的可监控.测试等功能的集群管理工具,是由H5编写的单独的网页程序.使用方法网上很多,这里教大家一个超简单安装h ...
- Fedora 21 设置开机启动脚本
sudo touch /etc/rc.d/rc.localsudo vim /etc/rc.d/rc.local 在/etc/rc.d/rc.local文件中写入, 然后使用:wq命令 保存并退出. ...
- demo_03HTML5中的动画效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 11-17的学习总结(DOMfirstday)
HTML: 超文本标记语言,专门定义网页内容的语言 XHTML: 严格的HTML标准 DHTML: 所有实现网页动态效果技术的统称 XML: 可扩展的标记语言,标签都是自定义的 XML语法和HTML语 ...