Link

  https://jzoj.net/senior/#main/show/5257

Problem

Solution

5~90分

  我们可以根据特殊性质搞

  如果数据小,直接暴力在树上面模拟一次

  如果满足性质1,就是第i条边连i和i+1地,那么就成了一条链,答案是可以按照数学方法计算出来的

  如果满足性质2,就是A=C,那么就是A~B的长度,可以预处理快速求出来

  这些分数,感谢出题人的馈赠

100分

  其实我们可以画个图,粗略的画个图,看看答案是什么

  

  显然,根据这个图,我们就知道,答案其实就是BX这条线段的长度

  怎么求?我们可以用最简单的容斥原理

  

  加一是因为X这个点之后要div2,所以应该得被计算2次

  我们发现,求AB,CB,AC的方法,都是求他们到lca的长度

  所以,我们可以用倍增,对他们做lca,并且记录路径长度

  我们一次递归,预处理出,每个点的深度。

  在递归中,顺便预处理f数组

  其中f[i,j]表示第i个节点,在他上面第2j个节点是什么。

  我们先把深度大的点,用倍增,弄成和另外一个节点一样的深度,这个和下面的方法类似

  然后同时倍增。

  其实就是找一个最大的j,满足f[a,j]不等于f[b,j],一直弄,最后就成了lca的两个儿子。

  加法随便弄一下就行了。

  其他两个求法类似,不在赘述了。

  时间复杂度:O(3n)(n表示点数)

Code

{$inline on}
var
n,m,i,j,x,y,z,tot:longint;
f:array[..,..] of longint;
pre,l,d:array[..] of longint;
dis,shen:array[..] of longint;
procedure insert(x,y:longint); inline;
begin
inc(tot);
d[tot]:=y;
pre[tot]:=l[x];
l[x]:=tot;
end; procedure dg(now,k,q:longint); inline;
var
s:longint;
begin
shen[now]:=k;
f[now,]:=q;
s:=l[now];
while s<> do
begin
if dis[d[s]]= then
begin
dis[d[s]]:=;
dg(d[s],k+,now);
end; s:=pre[s];
end;
end; function yes(x,y:longint):longint; inline;
var
ans,k:longint;
begin
ans:=;
if shen[x]>shen[y] then
begin
while shen[x]>shen[y] do
begin
for k:= downto do
if shen[f[x,k]]>=shen[y] then
break; x:=f[x,k];
ans:=ans+ shl k;
end;
end; if shen[x]<shen[y] then
begin
while shen[x]<shen[y] do
begin
for k:= downto do
if shen[f[y,k]]>=shen[x] then
break; y:=f[y,k];
ans:=ans+ shl k;
end;
end; while x<>y do
begin
for k:= downto do
if (f[x,k]<>f[y,k]) and (f[x,k]<>) and (f[y,k]<>) then
break; x:=f[x,k];
y:=f[y,k];
ans:=ans+ shl (k+);
end; exit(ans);
end; begin
readln(n,m,x);
for i:= to n- do
begin
readln(x,y); insert(x,y);
insert(y,x);
end; dis[]:=;
shen[]:=-maxlongint;
dg(,,); for j:= to do
for i:= to n do
f[i,j]:=f[f[i,j-],j-]; while m> do
begin
readln(x,y,z); writeln((yes(x,y)+yes(y,z)-yes(x,z)+) shr ); dec(m);
end;
end.

[jzoj]5257.小X的佛光的更多相关文章

  1. JZOJ 5257. 小X的佛光 (Standard IO)

    5257. 小X的佛光 (Standard IO) Time Limits: 2000 ms Memory Limits: 524288 KB Description Input Output Sam ...

  2. JZOJ.5257【NOIP2017模拟8.11】小X的佛光

    Description

  3. 计蒜客NOIP模拟赛4 D1T3 小X的佛光

    小 X 是远近闻名的学佛,平日里最喜欢做的事就是蒸发学水. 小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X ...

  4. 常州模拟赛d2t3 小X的佛光

    平日里最喜欢做的事就是蒸发学水.[题目描述]小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X 城时只建造 N ...

  5. [JZOJ] 5935. 小凯学数学

    由Noip2018初赛的知识得,a|b + a&b = a+b 设计一个区间dp,设\(f[l][r][x]\)表示区间\([l,r]\)能否构成\(x\),数据不大,转移暴力枚举 复杂度\( ...

  6. 计蒜客NOIP2017提高组模拟赛(四)day1

    T1:小X的质数 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的 ...

  7. JZOJ 5777. 【NOIP2008模拟】小x玩游戏

    5777. [NOIP2008模拟]小x玩游戏 (File IO): input:game.in output:game.out Time Limits: 1000 ms  Memory Limits ...

  8. JZOJ 5793. 【NOIP2008模拟】小S练跑步

    5793. [NOIP2008模拟]小S练跑步 (File IO): input:run.in output:run.out Time Limits: 2000 ms  Memory Limits:  ...

  9. JZOJ 5776. 【NOIP2008模拟】小x游世界树

    5776. [NOIP2008模拟]小x游世界树 (File IO): input:yggdrasil.in output:yggdrasil.out Time Limits: 1500 ms  Me ...

随机推荐

  1. C. cltt的幸运数LCAtarjan

    /*C: cltt的幸运数 Time Limit: 1 s      Memory Limit: 128 MB Submit Problem Description 一棵树有n个节点,共m次查询,查询 ...

  2. sqlserver text类型字段错误 net.sourceforge.jtds.jdbc.ClobImpl@66fa192的解决方法

    1. SqlServer数据库中text/ntext字段,在用jtds1.2驱动时,会出现用getString()取不到值的问题,toString()也不行. 昨天查了下帮助可以通过简单的配置解决.即 ...

  3. 字定义JSON序列化支持datetime格式序列化

    字定义JSON序列化支持datetime格式序列化 由于json.dumps无法处理datetime日期,所以可以通过自定义处理器来做扩展,如: import json from datetime i ...

  4. 20165323 预备作业3 Linux安装及学习

    一.Linux安装 首先我按照老师所给的步骤下载了VirtualBox 5.2.6和Ubuntu 16.04.3.有流程下载很简单,但是在下载的过程中还是出现了一些问题. 1.VirtualBox 只 ...

  5. flanneld,flannel和cni逐步深入

    这个问题,现在慢慢搞定. 把这两者的关系搞清楚了. 还有kubeadm join和手工安装Node的故事, 也没那么玄乎~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ htt ...

  6. (Access denied for user 'root'@'slaver1' (using password: YES))

    1.问题描述,启动azkaban的时候报如下所示的错误.之前使用azkaban是root用户,今天使用hadoop用户进行配置和使用,报这个错,说是root连接mysql拒绝了. [hadoop@sl ...

  7. webpack学习笔记--提取公共代码

    为什么需要提取公共代码 大型网站通常会由多个页面组成,每个页面都是一个独立的单页应用. 但由于所有页面都采用同样的技术栈,以及使用同一套样式代码,这导致这些页面之间有很多相同的代码. 如果每个页面的代 ...

  8. 想要将我们的OSGi框架中的批量日志单独打印到文件中

    我们的日志虽然没有直接依赖logback,但遗憾的是也没有使用slf4j,而是使用了Apache Common-Logging slf4j 和 common-logging有什么区别呢 common- ...

  9. table无法控制宽度

    table-layout:fixed

  10. 基于spring security 实现前后端分离项目权限控制

    前后端分离的项目,前端有菜单(menu),后端有API(backendApi),一个menu对应的页面有N个API接口来支持,本文介绍如何基于spring security实现前后端的同步权限控制. ...