LG#P1196. [NOI2002] 银河英雄传说

提交1 通过1
通过率100%
时间限制2000ms
内存限制512MiB
    ID: 12126 传统题 2000ms 512MiB 尝试: 1 已通过: 1 难度: 普及+/提高- 上传者: 标签>GESPGESP强化C++c++编程题并查集带权并查集相对距离

题目描述

题目描述

公元 58015801 年,地球居民迁居到金牛座 α\alpha 的第二颗行星,并在那里宣告银河联邦成立。同一年被定为宇宙历元年,人类也由此开始向银河深处拓展。

宇宙历 799799 年,银河两大军事集团在巴米利恩星域展开决战。莱因哈特率领十万余艘战舰出征,杨威利则组织三万艘战舰迎敌。为了布置战场,杨威利把星域划分为 3000030000 列,并把战舰依次编号为 113000030000。初始时,第 ii 号战舰单独位于第 ii 列,每一列都只有一艘战舰。

交战过程中,杨威利会发布调动指令 M i j。这条指令把第 ii 号战舰所在的整支队列作为不可拆分的整体,在保持队内先后顺序不变的前提下,接到第 jj 号战舰所在队列的尾部。题目保证执行这条指令前,两艘战舰不在同一列。

莱因哈特通过情报网监听这些调动,同时会发布询问指令 C i j。他想知道第 ii 号战舰和第 jj 号战舰当前是否在同一列;如果同列,还要知道它们之间排着多少艘战舰。

请按顺序处理全部指令,维护舰队的实时队列结构,并回答莱因哈特的每一次询问。

输入格式

第一行包含整数 TT,表示指令总数。

接下来 TT 行,每行是一条指令,格式为以下两种之一:

  • M i j:把战舰 ii 所在的整列接到战舰 jj 所在列的尾部。输入保证两舰执行前不在同一列。
  • C i j:询问战舰 ii 与战舰 jj 的当前关系。

每条指令都满足 iji\ne j

输出格式

调动指令不产生输出。

对于每条 C i j 指令输出一行:如果两舰同列,输出它们之间的战舰数量;如果两舰不在同一列,输出 1-1

4
M 2 3
C 1 2
M 2 4
C 4 2
-1
1

样例说明 #1

两次合并改变了队列结构;第一次查询的两舰不同列,第二次查询时两舰之间隔着一艘战舰。

3
C 1 2
M 1 2
C 1 2
-1
0

样例说明 #2

合并前两舰不同列,合并后相邻,因此两舰之间有 00 艘战舰。

5
M 1 2
M 3 4
M 1 3
C 2 4
C 1 4
1
2

数据范围与约定

1T5×1051\le T\le 5\times 10^51i,j300001\le i,j\le 30000,且 iji\ne j。每条 M 指令涉及的两艘战舰在合并前一定分属不同队列。