[jzoj]5257.小X的佛光
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的佛光的更多相关文章
- JZOJ 5257. 小X的佛光 (Standard IO)
5257. 小X的佛光 (Standard IO) Time Limits: 2000 ms Memory Limits: 524288 KB Description Input Output Sam ...
- JZOJ.5257【NOIP2017模拟8.11】小X的佛光
Description
- 计蒜客NOIP模拟赛4 D1T3 小X的佛光
小 X 是远近闻名的学佛,平日里最喜欢做的事就是蒸发学水. 小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X ...
- 常州模拟赛d2t3 小X的佛光
平日里最喜欢做的事就是蒸发学水.[题目描述]小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X 城时只建造 N ...
- [JZOJ] 5935. 小凯学数学
由Noip2018初赛的知识得,a|b + a&b = a+b 设计一个区间dp,设\(f[l][r][x]\)表示区间\([l,r]\)能否构成\(x\),数据不大,转移暴力枚举 复杂度\( ...
- 计蒜客NOIP2017提高组模拟赛(四)day1
T1:小X的质数 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感.小 X 认为,质数是一切自然数起源的地方. 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的 ...
- JZOJ 5777. 【NOIP2008模拟】小x玩游戏
5777. [NOIP2008模拟]小x玩游戏 (File IO): input:game.in output:game.out Time Limits: 1000 ms Memory Limits ...
- JZOJ 5793. 【NOIP2008模拟】小S练跑步
5793. [NOIP2008模拟]小S练跑步 (File IO): input:run.in output:run.out Time Limits: 2000 ms Memory Limits: ...
- JZOJ 5776. 【NOIP2008模拟】小x游世界树
5776. [NOIP2008模拟]小x游世界树 (File IO): input:yggdrasil.in output:yggdrasil.out Time Limits: 1500 ms Me ...
随机推荐
- 【C++ Primer | 15】继承的构造函数
继承的构造函数 子类为完成基类初始化,在C++11之前,需要在初始化列表调用基类的构造函数,从而完成构造函数的传递.如果基类拥有多个构造函数,那么子类也需要实现多个与基类构造函数对应的构造函数. cl ...
- C# 会话,进程,线程,线程安全
会话->进程->线程 b/s网站中,每个用户的访问为一次会话,会话中包含CPU为用户在内存中开辟空间存储的会话信息, 如Session,进程,会话拥有一个进程,同一进程下可以拥有多个线程. ...
- 如何用 Python 模糊搜索文件
一.我的文件在哪里? 1.告诉计算机文件在哪 使用路径描述位置 绝对路径——从根目录写到底 内置模块OS 路径 目录 文件 其他系统操作 2.描述文件的特征 用条件判断来筛选 3.对比后打印文件名 用 ...
- 20165235 学习基础和C语言基础调查
20165235 学习基础和C语言基础调查 首先第一个问题:你有什么技能比大多人(超过90%以上)更好?感觉很难回答这种问题,其实我对很多东西挺感兴趣的,如果非要拿出一种比较突出的技能的话我感觉就是象 ...
- <%= %>、<% %>、<%@ %>和<%# %>的区别
轉至http://blog.csdn.net/wildfeng04/article/details/7290126 <%=%> 里面放的变量名 <% %> 中间一般放函数或者方 ...
- 我今天遇到的条件语句Integer类型的
两个Integer类型的值进行比较时,应该用equals进行判断,用"=="判断是错误的,后来想了一下就明白了,Integer毕竟是对象, 而不是int基本数据类型,可以直接比较, ...
- 做项目单个功能的时候要理解需求和sql语句。
做项目单个功能的时候要理解需求和sql语句.最好直接按照给出来的sql语句或者存储过程来写,避免有极其细微的差别所造成的不同. 做宜春国税二期的时候有个功能叫夜间开票情况,钻取明细时由于没理解sql语 ...
- hdu1202解题报告
#include<stdio.h>int main(){ int n,i; double sum,s,p,sum1; while(scanf("%d" ...
- VDOM总结
https://segmentfault.com/a/1190000016129036
- POJ 3020 Antenna Placement (二分图最小路径覆盖)
<题目链接> 题目大意:一个矩形中,有N个城市’*’,现在这n个城市都要覆盖无线,每放置一个基站,至多可以覆盖相邻的两个城市.问至少放置多少个基站才能使得所有的城市都覆盖无线? 解题分析: ...