最近公共孩子(原创)
暂无测试数据。
还有2天就noip了,实在没时间写数据和std了。仅作纪念吧!!!想想思路还是好的。思路和未调试的“标程”在题解区。
【题目描述】
这是一个家族的故事。在遥远的非洲大草原上,生活着一群小猫猫,它们已经繁衍了好多好代了。在遥远而神秘的东方,有一个神秘的LYC,决定调查小猫猫用数十寸的身躯与猛兽搏斗而生存下来的秘密。LYC在非洲的一个“斯奇哒基阔挖尼尼托卡啊安吉楼底牢乌密牙阔喔”部落中获得了小猫猫种族神秘的族谱。这时候,LYC发现,有一个小猫猫部落较为的强悍,其中有猫国队长,钢铁猫,猫寡妇,雷神猫尔和绿巨猫等n只小猫猫(n小于等于10000)。小猫猫的种族结构很神奇,他们的繁殖方式如下:
1:自交繁殖。一只小猫猫就可以生下另一只小猫猫,不需要雌雄婚配。
2:循环繁殖。一只小猫猫可以生下另一只小猫猫,然后这只小猫猫死后,它生下的那只小猫猫以及这只小猫猫的所有后裔都有可能把它重新生下来。(什么情况?)
3:神通广大的小猫猫不能把自己生下来,并且不可能有两只同样的小猫猫同时存在。也就是说,某一只小猫猫在族谱中有且仅有一个位置。
4:一个部落所有的小猫猫不一定都有血缘关系。
现在呢,LYC有q組询问,要知道两只小猫猫的最近公共孩子。x,y的最近公共孩子指:x的某一个后裔,也是y的某一个后裔,并且与它们的相差代数和最小。相差代数指:x这只小猫猫的第几代孩子是z。也就是说,x和y的最近公共孩子可能是他们中的某一个本身。
【输入格式】
第一行两个整数,n,表示一共有n只小猫猫。一个m,表示有所有的生殖关系。
接下来m行,两个整数u,v,表示u能生下v。
接下来一个数q,表示一共有多少次询问。
接下来q行,每行两个整数x,y,
【输出格式】
对于这q组询问,输出一行一个数,为最近公共孩子。(如果没有,输出-1;如果有多个,输出编号最小的那一个)
【输入样例】
6 6
1 2
2 1
2 3
4 3
5 4
3 6
2
1 2
5 2
【输出样例】
1
3
【输出说明】
1生2 2生1 2生3 4生3 5生4 3生6
1与2的最近公共孩子可以是1也可以是2,1和2距离他们的代数差之和都为1,但是1的编号小,于是结果为1号点。
5与2的公共孩子有3和6,但是3与他们的代数差和为3,6与他们的代数和为5,所以结果为3号点。
【数据范围】
对于30%的数据 n<=63
对于100%的数据 n<=10000
对于所有数据,m<=10000,q<=10000
信息
- 难度
- 10
- 分类
- (无)
- 标签
- (无)
- 递交数
- 1
- 已通过
- 0
- 通过率
- 0%
- 上传者