并查集——银河英雄传说()

news/2024/11/15 0:13:06/

传送门:238. 银河英雄传说 - AcWing题库

思路:
使用并查集可以传递关系的性质,维护一个cnt[i]数组,该数组用于记录以i为跟并查集树下的战舰的数量,用一个d[i]数组表示在i前面的战舰的数量。

d数组和cnt数组的维护可以在get函数和merge函数时实现。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long ll;
const int N=3e4+10;
int d[N],f[N],cnt[N];
int get(int x)
{if(x==f[x]) return x;int u=get(f[x]);d[x]+=d[f[x]];return f[x]=u;
}
void merge(int x,int y)
{x=get(x),y=get(y); //找到x,y分别所在队列的首节点战舰f[x]=y;d[x]=cnt[y];  //原本一个首节点前面的战舰数量是零,但是现在接在了y后面,所以要加上cnt【y】,x后面的节点的d值会在下一次有关查找时更新。cnt[y]+=cnt[x];    //因为是将x所在的队列接到y后面所以是y加上x
}
int main()
{int t;for(int i=1;i<=N;i++){f[i]=i;cnt[i]=1;//每艘战舰自身的便算一个//d[i]=1;  //这里不能初始化为1是因为一开始i前面的战舰的数量为零。}scanf("%d",&t);while(t--){char a[2];int b,c;scanf("%s%d%d",a,&b,&c);int   x=get(b),y=get(c);if(a[0]=='C'){if(x==y){printf("%d\n",max(0,abs(d[b]-d[c])-1));}elseputs("-1");}elseif(x!=y)merge(x,y);}return 0;
}


http://www.ppmy.cn/news/404283.html

相关文章

【JZOJ1826】银河英雄传说

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

猎人与猎狗的故事

猎人与猎狗&#xff0c;看似永恒的主仆&#xff0c;但事事无绝对。一个小故事献给大家&#xff0c;故事虽小&#xff0c;含义颇丰&#xff0c;请各位看官慢慢看&#xff0c;细细读&#xff0c;用心品&#xff0c;绝对不会浪费大家的时间。既可以看好看的故事又可以在故事中受到…

【ACWing】238. 银河英雄传说

题目地址&#xff1a; https://www.acwing.com/problem/content/240/ 有一个划分为 N N N列的星际战场&#xff0c;各列依次编号为 1 , 2 , … , N 1,2,…,N 1,2,…,N。有 N N N艘战舰&#xff0c;也依次编号为 1 , 2 , … , N 1,2,…,N 1,2,…,N&#xff0c;其中第 i i i号战…

六边形战士

代码 效果如下

猎人、猎狗和公司

西方企业制度和经济制度的由来 至理名言&#xff1a; 干活的总是拿得少的&#xff0c;拿得多的都是不干活的——《人力资源管理》&#xff08;批注&#xff1a;此话全有道理吗&#xff1f;不是&#xff01;&#xff09; 也许有人看过&#xff0c;但没关系&#xff0c;的确有意思…

盘点五种最常见加密算法!

大家好&#xff0c;我是Martin。 今天&#xff0c;就给大家来盘点一下最常见的5种加密算法。 大家平时的工作中&#xff0c;可能也在很多地方用到了加密、解密&#xff0c;比如&#xff1a; 用户的密码不能明文存储&#xff0c;要存储加密后的密文 用户的银行卡号、身份证号…

Unreal 5 实现丧尸追逐攻击功能

要实现让丧尸能够智能的追逐玩家&#xff0c;我们需要用到ue封装的ai行为树来实现。基础相关的请查看&#xff1a;Unreal Engine 5.1 AI行为树基础入门&#xff0c;来学习一下如何使用ai行为树来实现一个简单的追逐功能。这一篇就是基于这个基础上进行了优化&#xff0c;实现了…

Modbus协议基于modscan 的设备数据收发过程模拟

Modbus协议基于modscan 的设备数据收发过程模拟 一、基本介绍二、工具使用说明2.1 Modsim32的使用 - 模拟从设备 - 生成设备数据2.1.1 新建虚拟设备 - modsim文件2.1.2 打开虚拟设备 - modsim文件2.1.3 连接设置2.1.3.1 modbus /tcp连接2.1.3.2 COM连接 2.1.4 配置 - 设置数据自…