题解:
用两个变量来维护:
1.sz[i]维护第i列元素的个数
2.pre[x]维护第x元素到当前队首的距离。
在并查集是不断维护这两个值。

至于如何维护看下图和文字解释
当然,这样维护还是不够的,对于pre数组我么会发现:
对于任意一个飞船,我们都知道它的祖先(不一定是队头,但一定间接或直接指向队头),还知道距离它祖先的距离。对于每一个飞船,它到队头的距离,就等于它到它祖先的距离加上它祖先到队头的距离 pre[x]+=pre[f[x]];(在并查集过程中不断维护即可)

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
//#define int long long
#define endl '\n'using namespace std;
const int maxn=5e5+10;
const int mod=1e9+7;int f[maxn],pre[maxn],sz[maxn];int ifind(int x){if(x==f[x]) return x;int fn=ifind(f[x]);pre[x]+=pre[f[x]];return f[x]=fn;
}void init(){for(int i=0;i<maxn;i++){sz[i]=1;f[i]=i;}
}signed main(){//    ios::sync_with_stdio(false);
//    cin.tie(0);
//    cout.tie(0);init();int n;cin>>n;for(int i=0;i<n;i++){char c;int x,y;cin>>c;cin>>x>>y;int dx=ifind(x);int dy=ifind(y);if(c=='M'){pre[dx]+=sz[dy];sz[dy]+=sz[dx];f[dx]=dy;sz[dx]=0;}else{if(dx!=dy) cout<<-1<<endl;else cout<<abs(pre[x]-pre[y])-1<<endl;}}
}

[NOI2002] 银河英雄传说(带权并查集好题)相关推荐

  1. 洛谷 P1196 [NOI2002]银河英雄传说 带权并查集

    https://www.luogu.org/problem/P1196 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展 ...

  2. NOI2002银河英雄传说——带权并查集

    题目:https://www.luogu.org/problemnew/show/P1196 关键点在于存下每个点的位置. 自己糊涂的地方:位置是相对于谁的位置? 因为每次给一个原来是fa的点赋位置时 ...

  3. 银河英雄传说 ← 带权并查集

    [问题描述] 有一个划分为N列的星际战场,各列依次编号为1,2,-,N. 有N艘战舰,也依次编号为1,2,-,N,其中第i号战舰处于第i列. 有T条指令,每条指令格式为以下两种之一: 1.M i j, ...

  4. How Many Answers Are Wrong HDU - 3038(带权并查集经典题,满满的都是注释)

    How Many Answers Are Wrong HDU - 3038  点击打开链接 题意:现在有n个数(你并不知道这n个数是什么),m次查询,每次查询给出u,v,w.表示从第u个数到第v个数的 ...

  5. 2017乌鲁木齐ICPC: I. A Possible Tree(带权并查集)

    I. A Possible Tree Alice knows that Bob has a secret tree (in terms of graph theory) with n nodes wi ...

  6. 学习笔记——拓展域并查集和带权并查集

    1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...

  7. 2017乌鲁木齐区域赛I(带权并查集)

    #include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...

  8. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  9. POJ1703带权并查集(距离或者异或)

    题意:       有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...

最新文章

  1. 山东春季高考计算机可以报考的本科学校,山东春季高考专业有哪些?可以报考的本科院校吗?...
  2. python编程怎么做游戏主播_如何成为一名成功的编程主播?
  3. 5位院士谈科研瓶颈:必须“逼着自己在精神上愿意吃苦”
  4. 容器环境自建数据库、中间件一键接入阿里云 Prometheus 监控
  5. Leetcode每日一题:530.minimum-absolute-difference-in-bst(二叉搜索树的最小绝对值)
  6. mysql变量包括什么意思_什么是mysql变量?
  7. ChannelOption.TCP_NODELAY, true-浅谈tcp_nodelay的作用
  8. 判断某个值是否存在指定枚举类中
  9. VPX,CompactPCI serial 总线
  10. cocos2d-x 3.x BabeLua 插件不能断点调试
  11. 深度学习落地项目 呼叫中心系统
  12. 如何擦除计算机连接网络的记录,如何清除上网记录 清除上网记录方法汇总
  13. python中pos函数,python pos是什么
  14. 骇客(Hacker)用语
  15. python汇率转换代码_python 实现一个图形界面的汇率计算器
  16. 基于Android的共享单车系统的设计与应用
  17. linux系统的特点有什么
  18. 四大盈利互联网经营理念
  19. Struts2(2)_什么是 struts2
  20. jQuery Promise 的用法

热门文章

  1. Python基础学习!基本元素,数字,字符串以及变量
  2. 经验 | 机器学习要避开十大雷区
  3. 实战|基于图割算法的木材表面缺陷图像分析
  4. 一道有关动态规划(Dynamic Programming)的网易面试题
  5. 详尽 | PyTorch动态图解析
  6. vivado 2018与modelsim的联合仿真
  7. Elasticsearch创建雇员目录
  8. VirtualBox上装CentOS5.8网络不通问题
  9. C#进阶系列——动态Lamada
  10. windows域设计best practice