题目链接

并查集,具体看注释。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int f[30005],p[30005],s[30005];
//f[i]表示第i艘战舰与哪一艘战舰在同一列中
//p[i]表示第i艘战舰的前面有多少艘战舰
//s[i]表示第i列有多少艘战舰
void find_x(int x)//起到路径压缩的作用
{
if(f[x]==x) return;//如果找到了祖先,就结束
find_x(f[x]);//如果没有,就继续找
p[x]+=p[f[x]];//更新p[x]的值
f[x]=f[f[x]];//路径压缩
}
int main()
{
for(int i=1;i<=30000;i++)//初始化
{
f[i]=i;
s[i]=1;
p[i]=0; }
int T=0;
scanf("%d",&T);
for(int q=1;q<=T;q++)
{
char x=' ';
int y=0,z=0;
scanf(" %c%d%d",&x,&y,&z);
if(x=='M')//合并操作
{
find_x(y);
find_x(z);
int tx=f[y],ty=f[z];
f[tx]=ty;//合并
p[tx]=s[ty];//合并到另一列的那个队列的队首战舰前面的战舰数就是另一列的总战舰数
s[ty]+=s[tx];//更新这一列的战舰数
s[tx]=0;//更新这一列的战舰数
}
else//询问
{
find_x(y);
find_x(z);
int tx=f[y],ty=f[z];
if(tx!=ty) printf("-1\n");//如果不在同一列,输出-1
else printf("%d\n",int(abs(p[y]-p[z])-1));//否则输出它们之间的战舰数目
}
}
return 0;
}

Luogu P1196 [NOI2002]银河英雄传说 | 并查集的更多相关文章

  1. 洛谷P1196[NOI2002]银河英雄传说-并查集扩展

    银河英雄传说 题意:在并查集的基础上,还要求出同一集合的两个点的距离 这道题用并查集自己是知道的,但是竟然可以这么骚的操作. 下面转自大佬的查详细题解 初见这道题,首先想到的方法当然是直接模拟,模拟每 ...

  2. noi2002银河英雄传说(并查集)

    首先表示对C++读入读出问题复杂程度的敬畏,看了好多没讲明白的,本题用cin竟然过不了评测,搞scanf的读入搞了好久.... 本题确实是一道经典的并查集题型,不多讲,拿来练练手用的(其中经历很惨) ...

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

    P1196 [NOI2002]银河英雄传说 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的 ...

  4. P1196 [NOI2002]银河英雄传说(并查集)

    P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...

  5. 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解

    花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...

  6. 解题报告:luogu P1196 [NOI2002]银河英雄传说

    由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题: 题目链接:P1196 [NOI2002]银河英雄传说 不是很简单,但对于大佬还是签到题. 合并与路径压缩时直接维护\(dis[ ...

  7. [洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集(1)

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

  8. P1196 [NOI2002]银河英雄传说(带权并查集)

    这个题的题目背景很是宏大,什么宇宙战舰的都出来了.但细细一看,我们就会发现,这是带权并查集的题目,首先我们还是像之前在并查集中的操作一样,但在这里我们还是应该开数组来维护所要加的权值,两个战舰是否在同 ...

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

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

随机推荐

  1. AES加密基本原理图解

    AES加密 Fright-Moch整理 AES简介 高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的).对 ...

  2. linux 上添加多个jdk

    1. 首先将你需要上传的jdk 上传并解压 2.你可以自定义解压的路径 3. alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_ ...

  3. 鸿蒙内核源码分析(编译脚本篇) | 如何防编译环境中的牛皮癣 | 百篇博客分析OpenHarmony源码 | v58.01

    百篇博客系列篇.本篇为: v58.xx 鸿蒙内核源码分析(环境脚本篇) | 编译鸿蒙原来如此简单 | 51.c.h.o 本篇用两个脚本完成鸿蒙(L1)的编译环境安装/源码下载/编译过程,让编译,调试鸿 ...

  4. CF932G-Palindrome Partition【PAM】

    正题 题目链接:https://www.luogu.com.cn/problem/CF932G 题目大意 给出一个长度为\(n\)的字符串,将其分为\(k\)段(\(k\)为任意偶数),记为\(p\) ...

  5. 测试工程需要明白的Monkey测试

    App稳定性测试 稳定性测试就是指软件长时间的持续运行,系统版本是否稳定,是否能否持续的为用户提供服务. 指标: 异常的次数 异常的频率 App的稳定性测试如何实施? 首选Monkey Monkey是 ...

  6. SpringCloud升级之路2020.0.x版-25.OpenFeign简介与使用

    本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent OpenFeign 的由来和实现思路 在微服务系统中,我们经常会进行 RPC 调用.在 S ...

  7. 面试官:为什么需要Java内存模型?

    面试官:今天想跟你聊聊Java内存模型,这块你了解过吗? 候选者:嗯,我简单说下我的理解吧.那我就从为什么要有Java内存模型开始讲起吧 面试官:开始你的表演吧. 候选者:那我先说下背景吧 候选者:1 ...

  8. Data Management Tools(数据管理工具)《二》

    (数据管理工具)<二> 点击跳转(数据管理工具)<一> 16.打包 # Process: 共享包 arcpy.SharePackage_management("&qu ...

  9. 解决nodejs的npm命令无反应的问题

    最近在弄cordova,又要折腾nodejs了. 今天安装cordova模块的时候,看到nodejs的默认模块安装路径在c盘 于是想修改下,按命令 npm config set prefix . 结果 ...

  10. 15-ThreadLocalRandom类剖析

    ThraedLocalRandom类是JDK7在JUC包下新增的随机数生成器,它弥补了Random类在多线程下的缺陷. Random类及其缺陷 下面看一下java.util.Random的使用方法. ...