一.战舰
1.题目
题目描述:
有1~n艘战舰,编号分别是1~n。开始,第i号战舰在第i列上。有m条命令,命令一共包含2种1、M, ij,将i号战舰所在的列的全部战舰,保持原有顺序接到第i列战舰后面;2、Cij,查询第i号战舰和第j号战舰是否在同一列,如果是中间间隔多少搜战舰。 (如果不在同一列,输出-1)n<=30000,m<500000)
样例输入:
4 4
M 2 3
C 1 2
M 2 4
C 4 2
样例输出:
-1
1
2.思路:
看到题,我们不难发现,这个可以建模为并查集,因为有明显特征嘛,不多赘述。
步骤一:
实现初始值和M的简单功能(不考虑路径距离)
#include<bits/stdc++.h>
uisng namespace std;
// 并查集数组 到祖先的距离 有多少成员
int fa[30010] , dis[30010] , size[30010];
int find(int x){
if(fa[