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] ...
随机推荐
- DNS服务器安装配置案例详解
案例配置要求:假设有一个域名:tianyik.com主机为:192.168.31.36 mail 192.168.31.37 www 192.168.31.38 pop --> ...
- 在ASP.NET中ShowModalDialog+ztree的使用
.aspx: <script type="text/javascript"> function getReturnValue() { var strResult = w ...
- php快速定位多维数组的深度
原文地址:php快速定位多维数组的深度作者:陌上花开 自定义一个函数: function array_depth($array) { $max_depth = 1; foreach ($array ...
- hibernate - 何时关闭数据库
ref: http://www.coderanch.com/t/637103/ORM/databases/close-database-connection-hibernate 我上这个问题, 原因是 ...
- 使用methodSignatureForSelector与forwardInvocation实现消息转发 (转)
转自:http://blog.sina.com.cn/s/blog_8c87ba3b0102v006.html 在给程序添加消息转发功能以前,必须覆盖两个方法,即methodSignatureForS ...
- C#网页版计算器程序代码
calculator.aspx.cs代码 using System; using System.Collections.Generic; using System.Linq; using System ...
- Azure cache 的配置与应用
最近公司的项目要是用cloud Service 所以研究了下 Azure cache 的配置与使用. 首先创建项目 第二步 配置 cache worker role (1) 点击 cache work ...
- 图解数据结构树之AVL树
AVL树(平衡二叉树): AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.在AVL树中任何节点的两个子 ...
- LINUX 压缩目录成一个压缩文件
#!/bin/bash file =$(date +%y%m%d%H%M)logfile=/home/目录名/backup/file.log echo "------"$(date ...
- [Machine Learning] Probabilistic Graphical Models:二、Bayes Network Fundamentals(1、Semantics & Factorization)
一.How to construct the dependency? 1.首字母即随机变量名称 2.I->G是更加复杂的模型,但Bayes里不考虑,因为Bayes只是无环图. 3.CPD = c ...