#P7348. 「MCOI-04」重型管制巡航机
「MCOI-04」重型管制巡航机
Description
在平面上给定一棵有根树,树根为 ,根的深度为 。
对于深度为 的节点,其 纵坐标 为 。
对于一个节点的所有子节点,从左到右按照编号升序排列。每条边都是一条 连接两个点的线段。
每一个叶子节点都有一条 平行于 轴且向 轴负方向无限延伸的射线,根节点有一条 平行于 轴且向 轴正方向无限延伸的射线。
任意两条线段或射线只在树的节点处相交。
如果你不理解这个树是怎么画的,可以阅读样例 1 解释。
给定 组 ,你现在要从点 开始在平面上自由移动,但是你不能经过除 以外的任何一个点,且每经过一条线段或射线就会产生 的代价。
你的目标是移动到点 ,你需要求出移动过程产生的最小代价。
Input Format
由于直接输入会造成巨大的输入量,所以本题采用特殊的输入方式。
给定如下随机数生成器:
namespace GenHelper
{
unsigned z1,z2,z3,z4,b;
unsigned rand_()
{
b=((z1<<6)^z1)>>13;
z1=((z1&4294967294U)<<18)^b;
b=((z2<<2)^z2)>>27;
z2=((z2&4294967288U)<<2)^b;
b=((z3<<13)^z3)>>21;
z3=((z3&4294967280U)<<7)^b;
b=((z4<<3)^z4)>>12;
z4=((z4&4294967168U)<<13)^b;
return (z1^z2^z3^z4);
}
}
void srand(unsigned x)
{using namespace GenHelper;
z1=x; z2=(~x)^0x233333333U; z3=x^0x1234598766U; z4=(~x)+51;}
int read()
{
using namespace GenHelper;
int a=rand_()&32767;
int b=rand_()&32767;
return a*32768+b;
}
第一行三个整数 。
接下来一行 个整数描述树的结构。第 个数代表 号节点的父亲的编号 。
接下来,如果 ,则标准输入中的接下来 行每行会有两个空格分隔的整数,代表询问的 和 ;设上一次询问的答案为 ,你真正要处理的询问是 和 ,其中 表示异或运算。如果这是第一次询问,则 。
否则,你需要先调用一次 得到询问的 ,再调用一次 得到询问的 。
Output Format
如果 ,则输出 行,每行是对应询问的答案。
如果 ,则输出两个空格分隔的整数,分别表示所有答案的异或和和所有答案的和。
9 4 -1
1 1 2 2 2 3 7 7
4 7
7 2
5 2
4 8
1
0
0
1
30 1 -1
1 2 3 4 5 6 7 7 9 9 11 11 12 13 13 14 17 18 19 20 21 19 23 22 22 25 25 28 29
6 30
2
30 10000 20051130
1 2 3 4 5 6 7 7 9 9 11 11 12 13 13 14 17 18 19 20 21 19 23 22 22 25 25 28 29
2 6362
Hint
For the enhanced version, see P7434.
样例 1 解释
第二次实际是询问 ,其他询问都满足 。

- 可以看出,从 到 需要经过一条线;
- 从 到 不需要经过直线;
- 从 到 不需要经过直线;
- 从 到 需要经过一条线;
- 故答案分别为 。
数据规模与约定
本题采用捆绑测试。
- Subtask 1(1 pts):,。
- Subtask 2(9 pts):,。
- Subtask 3(10 pts):,。
- Subtask 4(20 pts):,。
- Subtask 5(59 pts):。
- Subtask 6(1 pts):无特殊限制。
对于 的数据,,,,,,且 时 。
对于 的数据,保证 。
IO 量可能很大,请选择合适的读入输出方式。
说明
Minecraft OI Round 4 B
idea:ClCN solution:ClCN & _Guoyh_ check:_Guoyh_
你问为什么 MCOI 里面混入了 AC6?
很简单,因为 ClCN 不玩 MC。
京公网安备 11011102002149号