Luogu P1196 [NOI2002]银河英雄传说 | 并查集
并查集,具体看注释。
#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]银河英雄传说 | 并查集的更多相关文章
- 洛谷P1196[NOI2002]银河英雄传说-并查集扩展
银河英雄传说 题意:在并查集的基础上,还要求出同一集合的两个点的距离 这道题用并查集自己是知道的,但是竟然可以这么骚的操作. 下面转自大佬的查详细题解 初见这道题,首先想到的方法当然是直接模拟,模拟每 ...
- noi2002银河英雄传说(并查集)
首先表示对C++读入读出问题复杂程度的敬畏,看了好多没讲明白的,本题用cin竟然过不了评测,搞scanf的读入搞了好久.... 本题确实是一道经典的并查集题型,不多讲,拿来练练手用的(其中经历很惨) ...
- 【洛谷】P1196 [NOI2002]银河英雄传说【带权并查集】
P1196 [NOI2002]银河英雄传说 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的 ...
- P1196 [NOI2002]银河英雄传说(并查集)
P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...
- 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解
花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...
- 解题报告:luogu P1196 [NOI2002]银河英雄传说
由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题: 题目链接:P1196 [NOI2002]银河英雄传说 不是很简单,但对于大佬还是签到题. 合并与路径压缩时直接维护\(dis[ ...
- [洛谷P1196][NOI2002]银河英雄传说 - 带偏移量的并查集(1)
Description 公元五八〇一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...
- P1196 [NOI2002]银河英雄传说(带权并查集)
这个题的题目背景很是宏大,什么宇宙战舰的都出来了.但细细一看,我们就会发现,这是带权并查集的题目,首先我们还是像之前在并查集中的操作一样,但在这里我们还是应该开数组来维护所要加的权值,两个战舰是否在同 ...
- 洛谷P1196 [NOI2002]银河英雄传说(带权并查集)
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
随机推荐
- Stage 1 项目需求分析报告
迷你商城后台管理系统-- 需求分析 1. 引言 作为互联网热潮的崛起,消费者们的普遍差异化,实体商城要想在互联网的浪潮中继续发展,就需要制定出针对用户以及消费者的消费习惯以及喜爱品种的消费方案.从而企 ...
- 消息队列之 kafka 集群搭建
我们先弄清楚kafka集群环境首先需要些什么 JDK 10+ Zookeeper Kafka 2.x 首先准备三台虚拟机 centos7 ,更改IP地址为静态地址分别为,29.30.31 cd /et ...
- 教你用ps如何将图片、文字做出模糊斑驳的作旧效果
1.对图片的图层执行滤镜-风格化-扩散,选变亮优先. 2.选择画笔工具,在画笔选项里选择喷溅59像素,画笔大小我用的是100px,大家可以根据自己的情况自定义大小,前景设置为黑色. 3.在图章图层上方 ...
- Jemter请求乱码解决方案
1:jemeter查看结果树乱码 (1)在jmeter的bin目录下找到jmeter.properties这个文件,添加上 sampleresult.default.encoding=utf-8 (2 ...
- ❤️❤️新生代农民工爆肝8万字,整理Python编程从入门到实践(建议收藏)已码:8万字❤️❤️
@ 目录 开发环境搭建 安装 Python 验证是否安装成功 安装Pycharm 配置pycharm 编码规范 基本语法规则 保留字 单行注释 多行注释 行与缩进 多行语句 数据类型 空行 等待用户输 ...
- Python3入门系列之-----return返回值,我终于懂了
前言 初学者学习return的用法有点蒙,不知道它的作用是什么?返回的是什么?在什么时候要用?小伙伴也可能会遇到和我同样的困扰,给大家举个例子,马上就明白了. 同一段代码,函数中带return和没有r ...
- 踩坑系列《四》a标签的href属性拼接问题
如上所示,无法直接在 html里面的 a 标签的href属性传递参数时,只需要在 JS 中获取对应 a 标签的id,再通过 attr 方法抓到 href,进行字符串拼接即可
- 残差网络resnet理解与pytorch代码实现
写在前面 深度残差网络(Deep residual network, ResNet)自提出起,一次次刷新CNN模型在ImageNet中的成绩,解决了CNN模型难训练的问题.何凯明大神的工作令人佩服 ...
- 从零开始学算法---二叉平衡树(AVL树)
先来了解一些基本概念: 1)什么是二叉平衡树? 之前我们了解过二叉查找树,我们说通常来讲, 对于一棵有n个节点的二叉查找树,查询一个节点的时间复杂度为log以2为底的N的对数. 通常来讲是这样的, 但 ...
- Java学习路线【转】
Java学习路线[转] 第一阶段:JavaSE(Java基础部分) Java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置,程序的执行过程,相 ...