题目链接:https://www.luogu.org/problemnew/show/P1196

思路:

带权并查集。对每个结点,构造表示该结点的头结点,该结点距头结点的距离,该列的大小3个数组。

在合并过程中,要维护每个结点的权值,将x所在列的头结点接到y所在列的尾部,并修改xx距新头结点的距离,然后修改列的大小。

在查询过程中,也要维护每个结点的权值,计算两个结点的差值即可得到结果。

代码如下:

 #include<bits/stdc++.h>
using namespace std; int t;
int f[],l[],s[]; int get(int k){
if(f[k]==k) return k;
else{
int tmp=f[k];
f[k]=get(f[k]);
l[k]+=l[tmp];
s[k]=s[f[k]];
return f[k];
}
} int main(){
scanf("%d",&t);
for(int i=;i<=;i++)
f[i]=i,l[i]=,s[i]=;
char m;
int x,y;
while(t--){
scanf(" %c",&m);
scanf("%d%d",&x,&y);
int xx,yy;
if(m=='M'){
xx=get(x);
yy=get(y);
f[xx]=yy;
l[xx]=s[yy];
s[xx]+=s[yy];
s[yy]=s[xx];
}
else{
xx=get(x);
yy=get(y);
if(xx!=yy)
printf("-1\n");
else
printf("%d\n",abs(l[x]-l[y])-);
}
}
return ;
}

最新文章

  1. 图像映射map
  2. MATLAB 中NORM运用
  3. 框架操作DOM和原生js操作DOM比较
  4. java操作word,excel,pdf
  5. hello iic
  6. 通过rest接口获取自增id (twitter snowflake算法)
  7. WdatePicker 控制选择范围
  8. Linux 安全
  9. Oracle EBS-SQL (BOM-11):检查无BOM的装配件.sql
  10. 开通域名绑定DDNS
  11. 环境变量配置为jdk8,显示的java版本为jdk7
  12. 排序分析函数中对null的处理
  13. windows资源管理器中配置右键bash here
  14. 爬虫免登录进入github
  15. linux 计划任务 访问某个URL
  16. 18.23 inline函数功能
  17. Java关键字this与super
  18. Python 爬虫 解析库的使用 --- Beautiful Soup
  19. 配置Beyond Compare作为比较和合并工具
  20. Java日志框架Slf4j+Log4j入门

热门文章

  1. puppet 工作原理
  2. [转]winform CEF
  3. javascript对象讲解
  4. [UE4]多播代理
  5. Java5,Java 6,Java 7,Java 8新特性
  6. Storm存储结果至Redis
  7. 自己写的jQuery放大镜插件效果(二)(采用只有一张图片的思路)
  8. 【Codeforces】CF 9 D How many trees?(dp)
  9. 代码生成器 CodeSmith 的使用(二)
  10. catpcha