求LCA,N=1e6,原空间限制8MB

求LCA需要深度,需要跳跃一定距离的祖先,需要父节点

把一个整数压成3个char,f[]存父节点

g[],深度为奇数的点存往上跳576步能到的点,深度为偶数的点存深度

如果深度为奇数的点要求它的深度,求他父节点的深度+1

如果深度为偶数的点要求它往上跳576步的祖先,先往上跳一步,变成奇数深度

如何求往上跳576步的祖先?

1、往上跳6次1步,g就存的往上跳6步的祖先

2、往上跳6次6步,g就存的往上跳36步的祖先

3、往上跳4次36步,g就存的往上跳144步的祖先

4、往上跳4次144步,g就存的往上跳576步的祖先

还有,不能开iostream库,不然爆空间。。。

#include<cstdio>

using namespace std;

#define N 1000001

const int D=;

struct node
{
char a,b,c;
}f[N],g[N]; inline int F(int i)
{
return ((f[i].a<<)+f[i].b<<)+f[i].c;
} inline int G(int i)
{
return ((g[i].a<<)+g[i].b<<)+g[i].c;
} inline int d(int i)
{
return G(i)<N ? G(i):G(F(i))+;
} void read(int &x)
{
x=; char c=getchar();
while(c<''||c>'') c=getchar();
while(c>=''&&c<='') { x=x*+c-''; c=getchar(); }
} node turn(int x)
{
node y;
y.a=x>>;
y.b=(x>>)&;
y.c=x&;
return y;
} int lca(int x,int y)
{
int u;
if(d(x)<d(y)) u=x,x=y,y=u;
int dis=d(x)-d(y);
while(dis>=D)
{
if(G(x)<N) x=F(x),dis--;
else x=G(x)-N,dis-=D;
}
while(dis) x=F(x),dis--;
while(x!=y)
{
if(G(x)<N||G(x)==G(y)) x=F(x),y=F(y);
else x=G(x)-N,y=G(y)-N;
}
return x;
} int main()
{
freopen("squirrel.in","r",stdin);
freopen("squirrel.out","w",stdout);
int n,m;
read(n); read(m);
g[]=turn(N);
int x;
for(int i=;i<=n;++i)
{
read(x);
f[i]=turn(x),g[i]=turn(G(F(i))+);
}
for(int i=n;i;i--)
if(G(i)&)
{
x=i;
for(int j=;j<=;++j) x=F(x);
g[i]=turn(x+N);
}
for(int i=n;i;i--)
if(G(i)>N)
{
x=i;
for(int j=;j<=;++j) x=G(x)-N;
g[i]=turn(x+N);
}
for(int i=n;i;i--)
if(G(i)>N)
{
x=i;
for(int j=;j<=;++j) x=G(x)-N;
g[i]=turn(x+N);
}
for(int i=n;i;i--)
if(G(i)>N)
{
x=i;
for(int j=;j<=;++j) x=G(x)-N;
g[i]=turn(x+N);
}
int y;
while(m--)
{
read(x); read(y);
printf("%d\n",lca(x,y));
}
}

2016vijos 6-1 松鼠聚会(LCA+卡空间)的更多相关文章

  1. [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1318  Solved: 664[Submit][Stat ...

  2. bzoj-3170 3170: [Tjoi 2013]松鼠聚会(计算几何)

    题目链接: 3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MB Description 有N个小松鼠,它们的家用一个点x,y表 ...

  3. BZOJ3170: [Tjoi 2013]松鼠聚会

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 531  Solved: 249[Submit][Statu ...

  4. BZOJ 3170: [Tjoi 2013]松鼠聚会 切比雪夫距离

    3170: [Tjoi 2013]松鼠聚会 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  5. BZOJ 3170: [Tjoi 2013]松鼠聚会( sort )

    题目的距离为max(|x1-x2|, |y1-y2|) (切比雪夫距离). 切比雪夫距离(x, y)->曼哈顿距离((x+y)/2, (x-y)/2) (曼哈顿(x, y)->切比雪夫(x ...

  6. BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和

    BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和 题意:有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点, ...

  7. 获取sd卡空间大小和获取sd卡目录

    获取sd卡空间大小 TextView tv_total_size = (TextView)findViewById(R.id.textView1); TextView tv_useable_size ...

  8. 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]

    题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...

  9. 【BZOJ】【3170】【TJOI2103】松鼠聚会

    切比雪夫距离+曼哈顿距离 题解:http://www.cnblogs.com/zyfzyf/p/4105456.html 其实应该先做这题再做[BZOJ][3210]花神的浇花集会的吧…… 我们发现d ...

随机推荐

  1. 【BZOJ3625】【CF438E】小朋友和二叉树 NTT 生成函数 多项式开根 多项式求逆

    题目大意 考虑一个含有\(n\)个互异正整数的序列\(c_1,c_2,\ldots ,c_n\).如果一棵带点权的有根二叉树满足其所有顶点的权值都在集合\(\{c_1,c_2,\ldots ,c_n\ ...

  2. hdu 6253 (bfs打表)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6253 题意: 马可以往一个方向走两步,然后转个弯走一步,这样算一次动作,求问马n次动作后,能到达多少个点, ...

  3. 洛谷P4891 序列(势能线段树)

    洛谷题目传送门 闲话 考场上一眼看出这是个毒瘤线段树准备杠题,发现实在太难调了,被各路神犇虐哭qwq 考后看到各种优雅的暴力AC......宝宝心里苦qwq 思路分析 题面里面是一堆乱七八糟的限制和性 ...

  4. linux系统下saltstack的安装和配置

    Saltstack是一个新的基础设施管理工具,两大功能:远程执行和配置管理. Saltstack使用Python开发,是一个非常简单易用和轻量级的管理工具.由Master和Minion构成,通过Zer ...

  5. [ZJOI2015]地震后的幻想乡(期望+dp)

    题目描述 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们. 这不,幻想乡突然发生了地震,所有的道路都崩塌了.现在的首要任务是尽快让幻想 ...

  6. 仓鼠找sugar(LCA)

    小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅(b),而他的基友同时要从他的卧室(c)到图书馆( ...

  7. Go 语言和 Scala 语言对比

    我在Google写过Go(自己的业余时间),也在LinkedIn写过Scala.两者都是具有一流的并发特性的现代语言. 下面的回答是基于我编写大规模的软件的经验得出. Go是一种开发模式严格固定,并且 ...

  8. ArcGIS for qml -设置地图和视域中心

    源码:https://github.com/sueRimn/ArcGIS-for-qml-demos 作者: 狐狸家的鱼 Github: 八至 版权声明:如需转载请获取授权和联系作者 ArcGIS R ...

  9. ImageMagick 笔记: 索引颜色(index color)、锁定图层,透明 png 转 gif (保持清晰度)

    今天在处理一张 png 透明背景的图片,大小: 16KB, 尺寸: 400 x 300,用到一段代码,也许对以后有用. /** 带透明背景和阴影的png图片, 转换成 gif, [索引色] + [锁住 ...

  10. win32-api: 让 static 控件中的水平横行,垂直居中。

    CreateWindowEx(....., SS_CENTER | SS_CENTERIMAGE); SS_CENTER  能让文字水平居中. SS_CENTERIMAGE 能让文字垂直居中. htt ...