题目名称 2304. [HZOI 2015]简单的最近公共祖先
输入输出 get_tree.in/out
难度等级 ★★★
时间限制 2000 ms (2 s)
内存限制 256 MiB
测试数据 10
题目来源 GravatarAglove 于2016-05-12加入
开放分组 全部用户
提交状态
分类标签
树链剖分
分享题解
通过:16, 提交:116, 通过率:13.79%
GravatarSky_miner 100 4.465 s 107.10 MiB C++
Gravatargls1196 100 4.554 s 122.38 MiB C++
GravatarSky_miner 100 4.585 s 114.73 MiB C++
Gravatargls1196 100 4.593 s 122.38 MiB C++
Gravatar再见 100 4.980 s 103.29 MiB C++
Gravatar神利·代目 100 5.102 s 82.66 MiB C++
GravatarL_in 100 5.572 s 114.75 MiB C++
Gravatarassassain 100 5.575 s 91.84 MiB C++
Gravatar半汪 100 5.594 s 96.41 MiB C++
GravatarAglove 100 5.822 s 114.73 MiB C++
关于 简单的最近公共祖先 的近10条评论(全部评论)
log^2卡了80分,我知足了= =
GravatarAntiLeaf
2016-10-08 19:03 13楼
。。。题干中没说如果没有LCA就返回-1啊。。。虽然样例给出了。。
GravatarSky_miner
2016-09-08 16:08 12楼
回复 @prefect1999 :
OwO 这不OI OwO
貌似上次某人也出现了这种情况,不过是读入的时候定义了冲突的东西
然而这次我看不懂了QAQ
GravatarAglove
2016-07-03 19:13 11楼
回复 @Aglove :
写上题面上说的那几行代码后,莫名其妙RE。。。
Gravatarprefect1999
2016-07-03 19:05 10楼
回复 @Sky_miner :
已更正题面,是我疏忽了
GravatarAglove
2016-06-13 17:34 9楼
这售后服务很赞啊=w=
Gravatar一個人的雨
2016-06-07 22:45 8楼
回复 @白天<=>黑 :
orz 看来好像遇到玄学了55555 谢谢你咯233333
Gravatarhebomou
2016-06-03 09:13 7楼
回复 @hebomou :
QAQ 我也不太清楚是什么情况
昨天下午的时候把namespace去了,之后把读入str字符串改成ch=getchar()
就过了QAQ
GravatarAglove
2016-06-03 06:18 6楼
回复 @白天<=>黑 : 谢谢咯23333 时间戳有道理啊 被stl惯坏了233333
但是好像不是读入的锅。。? 因为输出是对的 但是程序返回值不正常。。
Gravatarhebomou
2016-06-02 22:42 5楼
回复 @hebomou :
其实您可以用一个时间戳来替换set啊QAQ
您来做我的题目我真是太开森了
GravatarAglove
2016-06-02 15:26 4楼

2304. [HZOI 2015]简单的最近公共祖先

★★★   输入文件:get_tree.in   输出文件:get_tree.out   简单对比
时间限制:2 s   内存限制:256 MiB

题目描述:

给定一棵有根树,树根为1

一开始树上所有节点都是白色的,要求你维护以下操作:

1、C 将树上所有黑色节点变成白色

2、M u 将u节点染黑

3、Q u 查询u和所有黑色节点的所有LCA的深度最大的点的编号

LCA定义为两个点的最近公共祖先


输入格式:

第一行输入n,m表示节点总数和操作总数

以下n-1行每行u,v描述树上的一条边的两个端点

以下m行每行描述一个询问如题所示

n,m<=2000000


输出格式:

对于每个Q询问输出相应的答案

如果没有LCA的话输出-1


输入样例:


10 10

1 2

1 3

2 4

3 5

4 6

3 7

4 8

7 9

8 10

M 9

M 9

M 6

Q 10

Q 5

M 9

C

Q 6

M 4

M 5


输出样例:

4

3

-1


提示:

注意输入数据较大,推荐使用读入优化

由于cojs评测机的问题,可能会爆栈,所以请在main函数的开头加入如下程序:


int __size__=128<<20;

char *__p__=(char*)malloc(__size__)+__size__;

__asm__("movl %0, %%esp\n"::"r"(__p__));

注意上述代码会占用你128MB的空间,请自行修改,测试数据大约开到70MB就可以了

本题开了标程两倍的时限,而且是黑白树系列的某道题的加强版,原做法是难以通过的

本题的做法是本人自己想出来的,如果有更好的做法,欢迎与我联系

本来想强制在线的,但是为了更好的算法的出现就没有强制 强制在线