并查集——银河英雄传说

news/2024/11/15 0:02:42/

银河英雄传说

解:对M操作,用并查集维护即可。对于C操作,在合并结点的时候还需要维护s和d两个数组,s表示当前集合的大小,保存在根结点上,d表示当前元素到根结点的距离,保存在各个元素上。在合并结点的同时更新s与d数组,运用前缀和的思想,即可O(1)回答各个询问。

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for(int i = a;i<n;i++)
#define per(i,a,n) for(int i = n-1;i>=a;i--)
#define pb push_back
#define mp make_pair
#define eb emplace_back
#define all(x) (x).begin(),(x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define yes cout<<"YES"<<'\n';
#define no cout<<"NO"<<'\n';
#define endl '\n';
typedef vector<int> VI;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef double db;
mt19937 mrand(random_device{}());
const ll MOD=1000000007;
int rnd(int x) {return mrand() % x;}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;};
ll lcm(int a,int b){return a*b/gcd(a,b);};const int N=30010;
int n;
int p[N],s[N],d[N];int findd(int x){if(p[x]!=x){int root=findd(p[x]);d[x]+=d[p[x]];p[x]=root;}return p[x];
}int main(){ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n;rep(i,0,N) p[i]=i,s[i]=1;rep(i,0,n){char op;int a,b;cin>>op>>a>>b;if(op=='M'){int pa=findd(a),pb=findd(b);if(pa!=pb){d[pa]=s[pb];s[pb]+=s[pa];p[pa]=pb;}}else{int pa=findd(a),pb=findd(b);if(pa!=pb){cout<<-1<<endl;}else cout<<max(0,abs(d[a]-d[b])-1)<<endl;}}return 0;
}


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

相关文章

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

传送门&#xff1a;238. 银河英雄传说 - AcWing题库 思路&#xff1a; 使用并查集可以传递关系的性质&#xff0c;维护一个cnt[i]数组&#xff0c;该数组用于记录以i为跟并查集树下的战舰的数量&#xff0c;用一个d[i]数组表示在i前面的战舰的数量。 d数组和cnt数组的维护可以…

【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;实现了…