题目链接: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 ;
}

luoguP1196(带权并查集)的更多相关文章

  1. POJ 1703 Find them, Catch them(带权并查集)

    传送门 Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42463   Accep ...

  2. [NOIP摸你赛]Hzwer的陨石(带权并查集)

    题目描述: 经过不懈的努力,Hzwer召唤了很多陨石.已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域.有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域 ...

  3. poj1417 带权并查集 + 背包 + 记录路径

    True Liars Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2713   Accepted: 868 Descrip ...

  4. poj1984 带权并查集(向量处理)

    Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 5939   Accepted: 2 ...

  5. 【BZOJ-4690】Never Wait For Weights 带权并查集

    4690: Never Wait for Weights Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 88  Solved: 41[Submit][ ...

  6. hdu3038(带权并查集)

    题目链接: http://acm.split.hdu.edu.cn/showproblem.php?pid=3038 题意: n表示有一个长度为n的数组, 接下来有m行形如x, y, d的输入, 表示 ...

  7. 洛谷OJ P1196 银河英雄传说(带权并查集)

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  8. poj1984 带权并查集

    题意:有多个点,在平面上位于坐标点上,给出一些关系,表示某个点在某个点的正东/西/南/北方向多少距离,然后给出一系列询问,表示在第几个关系给出后询问某两点的曼哈顿距离,或者未知则输出-1. 只要在元素 ...

  9. poj1611 带权并查集

    题意:病毒蔓延,现在有 n 个人,其中 0 号被认为可能感染,然后给出多个社交圈,如果某个社交圈里有人被认为可能被感染,那么所有这个社交圈里的人都被认为可能被感染,现在问有多少人可能被感染. 带权并查 ...

随机推荐

  1. Date类型之组件方法

    在之前总结了Date类型的继承方法和格式化方法,现在来总结一下日期时间组件方法,这些方法都是直接取得和设置日期值中特定部分的方法. var d = new Date(); //getDate() 从 ...

  2. HDU 2548 A strange lift

    A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  3. document.write覆盖问题

    1.不会覆盖页面: 如果仅仅是一句js语句:document.writeln('<span id=\'span1\'>嗯,你好</span>'); ps:\'是转义字符,代表' ...

  4. 学习笔记之REST/RESTful

    REST(Representational state transfer) - Wikipedia https://en.wikipedia.org/wiki/Representational_sta ...

  5. Linux常用的一些基础命令

    删除 rm -rvf * -f:强制删除文件或文件夹 -r:递归的删除文件或文件夹 -i:删除文件或文件夹前需要确认 -v:详细显示进行步骤 查看 ls ll        ls -l cat mor ...

  6. GitLab更新远程分支信息

    项目开发中,当远程分支有变动,有人增加或删除了某些分支,而自己本地没有及时自动刷新出来分支的时候,可以用以下命令来更新以下分支信息 git fetch origin --prune 恩,就酱-

  7. mongodb 如何区分大小写

    mongodb是区分大小写的,在做mongodb数据库操作是经常使用toUpperCase()等方法将value转换为大写存到数据库中 e.g. 在做数据库模糊查询时语句如下 db.COLLECTIO ...

  8. spark 存储管理机制

    累加器 -- Accumulators 广播变量--Broadcast Variables 思考 回顾 存储管理模块架构--从架构上来看 存储管理模块架构--通信层 存储管理模块架构--存储层 存储管 ...

  9. GlusterFS PERFORMANCE TUNING

    众所周知,glusterfs对小文件而言,就是个鸡肋,特别是在一个目录下有过W的小文件图片时,ls简单就是个坑,下面我对线上的glusterfs参数做一些优化调整,调整的命令: gluster vol ...

  10. api 1.1构架篇

    首先让其自动加载??? 在YiiBase.php里面 改写autoload方法:     /**     * Class autoload loader.     * This method is p ...