愚蠢的LCAAAAA~~~~(>_<)~~~~
很愤怒!特别愤怒!超级愤怒!!!
我LCA居然错了!!而且是那种特别愚蠢的错误
我把代码都交错了!!!
silasila
话不多说,代码上特别详细了
#include<bits/stdc++.h>
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,a,b) for(register int i=a;i>=b;i--)
using namespace std;
const int N=+;
int n,m,s;
int scan()
{
int as=,f=;
char c=getchar();
while(c>''||c<''){if(c=='-') f=-;c=getchar();}
while(c>=''&&c<=''){as=(as<<)+(as<<)+c-'';c=getchar();}
return as*f;
}
struct ss
{
int now,next;
}b[N*];
int num=;
int deep[N],fa[N][],lg[N],head[N];
void add(int x,int y)
{
num++;
b[num].next =head[x];
b[num].now=y;
head[x]=num;
}
void dfs(int f,int father)
{
deep[f]=deep[father]+;//根节点的深度
fa[f][]=father;//表明该f的最直接祖先是father
for(int i=;(<<i)<=deep[f];i++)//小于该深度啊...
{
fa[f][i]=fa[fa[f][i-]][i-];//他的祖先是祖先的祖先啊,我们是从
//上往下走的,所以关于他的祖先的祖先也是早就求出来的
}
for(int i=head[f];i;i=b[i].next)//找儿子!!
{
int j=b[i].now ;
if(j!=father)
dfs(b[i].now,f);//找儿子,木有毛病啊
}
}
int lca(int x,int y)
{
if(deep[x]<deep[y])
swap(x,y);//是x成为层数深的那个
ROF(i,,)
{
if(deep[fa[x][i]]>=deep[y]) x=fa[x][i];
if(x==y) return x;//此时就找到了!!
}
// if(x==y) return x;//此时就找到了!!
for(int k=;k>=;k--)
{
if(fa[x][k]!=fa[y][k])//父亲不同就同时往上跳
{
x=fa[x][k];
y=fa[y][k];
}
}
return fa[x][];//此时xy的父节点相同,所以该点直接的父亲结点就是LCA
}
int main()
{
// freopen("lca.in","r",stdin);
// freopen("lca.out","w",stdout);
n=scan();
FOR(i,,n)
{
int x,y;
x=scan();
if(x==) {s=i;}
add(x,i);
//add(i,x);//储存撒
}
dfs(s,);//s是0结点的儿子..
m=scan();
int lst=;
FOR(i,,m)
{
int x,y;
x=scan();y=scan();x=x^lst;y=y^lst;
lst=lca(x,y);
printf("%d\n",lst);
}
return ;
}
silasila
愚蠢的LCAAAAA~~~~(>_<)~~~~的更多相关文章
- DDD 领域驱动设计-看我如何应对业务需求变化,愚蠢的应对?
写在前面 阅读目录: 具体业务场景 业务需求变化 "愚蠢"的应对 消息列表实现 消息详情页实现 消息发送.回复.销毁等实现 回到原点的一些思考 业务需求变化,领域模型变化了吗? 对 ...
- C语言中史上最愚蠢的Bug
C语言中史上最愚蠢的Bug 本文来自“The most stupid C bug ever”,很有意思,分享给大家.我相信这样的bug,就算你是高手你也会犯的.你来看看作者犯的这个Bug吧.. 首 ...
- 【吐槽】IM群里几种我认为愚蠢的提问方式
一.“有人吗?” 你能得到一句[在,请说]的答复我就服了你,这样问的结果往往是等半天没一个人鸟你,悲观的你或者就此凄凉的退群了,感概人情冷暖的同时甚至开始怀疑人生:积极的你或者这才意识到~要不干脆说问 ...
- 一次愚蠢的NOIP模拟赛
找礼物[find.pas/find.c/find.cpp] [问题描述] 新年到了,突然间,就在那美丽的一霎那,你好友和你(K个人)的周围满是礼物,你发扬你帅气的风格,让你的好友先拿,但是每个人只能拿 ...
- discuz特殊主题插件开发步骤和犯的愚蠢错误
discuz作为国内流行的论坛系统,可谓造福了不少趣味相投的网友们.它让天南地北.国内外有着共同兴趣爱好的人们聚集在一起,分享彼此的喜怒哀乐.心得体会.然而作为discuz的使用者之一,还是个码农,然 ...
- 【每周一译】愚蠢的指标:Java中使用最多的关键字
此翻译纯属个人爱好,由于水平所限,翻译质量可能较低.网络上可能存在其它翻译版本,原文地址:http://blog.jooq.org/2013/08/26/silly-metrics-the-most- ...
- 又是一个愚蠢的错误,皆因.xml而起
论java中的.xml到底有多坑?! 感觉自己都快哭了,再一次被.xml给坑了一下,这次坑的太狠了,一下子导致自己浪费了昨天一下午,一晚上,今天一上午和半个下午呀,中间的过程真的是乏善可陈呀,各 ...
- iOSUIWebView---快停下啦,你的愚蠢的行为
公元前 之前还是学生时代的时候给社团们学弟学妹们介绍iOS编程的时候,简单的准备了图灵ios培训第一周(使用UIWebView创建简易浏览器), NSURL *url =[NSURL URLWithS ...
- 一个愚蠢的python逻辑语法错误
这个事情再次佐证了一个莫名其妙的现象背后一定会有一个愚蠢到无以复加的错误的真理. 写python单元测试的时候发现一个莫名其妙的问题: def xmlStandander(self,s): retur ...
随机推荐
- 深入浅出 Webpack
深入浅出 Webpack 评价 Webpack 凭借强大的功能与良好的使用体验,已经成为目前最流行,社区最活跃的打包工具,是现代 Web 开发必须掌握的技能之一.作者结合自身的实战经验,介绍了 Web ...
- jmeter结合autoit操作windows程序
需求: 模拟操作下图软件的控件,如拨号和挂机. 1. 下载安装好autoit后,打开finder tool,使用查找工具定位到要模拟操作的控件上,如图: 2.在finder tool中的control ...
- js字符编码笔记
一. 什么是unicode? ascii码能表示的字符非常有限(128个字符),这对英文来说足够了,但是对法文.中文.土耳奇文等文字则远远不够,于是就产生了新的编码规则-unicode,unicod ...
- 第四篇 Python循环
While 循环 For 循环
- 文件名的查找——find
查找文件!!! 命令格式:find [PATH] [option] [action] 一.参数1——与时间有关的参数 -atime.-ctime.-mtime -mtime n:在n天之前的“一天之内 ...
- IDEA运行lambda表达式
在idea写了一个lambda的测试例子,但是运行一直报错, public class LambdaTest { public static void main(String[] args) { ne ...
- iOS-SDWebImage的原理以及使用流程
SDWebImage 支持异步的图片下载+缓存,提供了 UIImageView+WebCacha 的 category,方便使用.SDWebImage加载图片的流程: 1. 入口 setImageWi ...
- vue2.0中父子组件之间的通信总结
父组件: 子组件: 接受父组件的信息: 向父组件发送事件: (其中slot是插槽,可以将父组件中的<p>123</p>插入进来,如果父组件没有插入的内容,则显示slot内部的内 ...
- 【python】time 和datetime类型转换,字符串型变量转成日期型变量
s1='20120125'; 6 s2='20120216'; 7 a=time.strptime(s1,'%Y%m%d'); 8 b=time.strptime( ...
- [bzoj1033] [ZJOI2008]杀蚂蚁 Big MoNI
这个模拟就不用说了吧...... 注意事项(救命的):1.不能回原位 2.在可以打到target的塔打target的时候,其他打不到的继续打自己的(这是显然的事情只是当时已惘然) 3.如果游戏在某一秒 ...