由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题: 题目链接:P1196 [NOI2002]银河英雄传说 不是很简单,但对于大佬还是签到题. 合并与路径压缩时直接维护\(dis[],num[]\),就好了,不过为什么要引进\(num[]\)呢? 真无奈. 不过++此题就很简单了,注意\(getf()\)有两句不要写反,否则就\(10\;pts\)了.一会代码里有标注. 复杂度是\(O(n\alpha(n))\)(其实我也不知道是这个吗,差不多就行了) \(Code\): #…
题目链接:https://www.luogu.org/problemnew/show/P1196 题意: 有30000个战舰队列,编号1...30000. 有30000艘战舰,编号1...30000,初始时第i艘战舰在第i个战舰队列中. 然后t个操作: (1)M i j:将战舰i所在的队列整体接到战舰j所在队列的尾部. (2)C i j:询问战舰i,j之间有多少艘战舰.若i,j不在同一队列中,输出-1. 题解: dis[i]表示战舰i与par[i]之间的距离. siz[i]表示战舰i所在队列的大…
一年没写博客了(滑稽). 这道题很玄学,导致自己都有一个坑人的问题求解.如果有大佬有能力求帮助:https://www.luogu.org/discuss/show?postid=30231 再来讲一下我对这道题的理解吧. 首先,对于判断两个数是否在同一列战舰中,我们只需要朴素的并查集就可以. 但这道题还要求我们去搞一个两船之间的距离(这就很难办了),所以只能使用带权并查集. 我们开一个数组front[],来表示第i号战舰到i所在的战舰的队头的距离.这样如果两个战舰在同一列中,他们的距离就是ab…
[Luogu 1196] NOI2002 银河英雄传说 话说十六年前的 NOI 真简单... 我一开始还把题看错了- 题意:一群人,每个人各自成一队,每次命令让两队首位相接合成一队,每次询问问你某两个人之间有几个人. 容易想到合并用并查集来实现. 至于计数,\(\mathrm{sum}_i\) 表示 \(i\) 到队首有几个人(如果 \(i\) 在队首,\(\mathrm{sum}_i = 0\)): \(\mathrm{num}_i\) 表示以 \(i\) 为队首的队伍有几个人(如果 \(i\…
P1196 [NOI2002]银河英雄传说 题目大意: 给你一个序列,支持两种操作: 合并指令为$M_{i,j}$j​,含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所在的战舰队列的尾部. $C_{i,j}$​该指令意思是,询问电脑,杨威利的第ii号战舰与第jj号战舰当前是否在同一列中,如果在同一列中,那么它们之间布置有多少战舰. 据说是带权并查集,其实就是多维护了几个变量而已, fa[x]依旧表示x的父亲,front[x]表示x与x队头之间的距离,num[x]表…
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨威利组织麾下三万艘战舰迎敌. 杨威利擅长排兵布阵,巧妙运用各种战术屡次以少胜多,难免恣生骄气.在这次决战中,他将巴米利恩星域战场划分成30000列,每列依次编号为1, 2, …,30000.之后,他把自己的战舰也依次编号为1, 2,…
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<iomanip> #include<iostream> #include<algorithm> using namespace std; ; int n,fa[N],dis[N],cnt[N]; inline int read() { ;bool flag=false;…
题意简述 有30000列,每列都有一艘战舰,编号1~30000 有2种操作: 1.将一列的战舰运到另一列 2.询问两个战舰是否在同一列,如果是,求出它们之间的距离 题解思路 并查集, 维护每个点x离自己祖先的距离dis[x],和该点所在集合的大小size[x] 每次查找时更新即可, 点x,y之间距离为abs(dis[x] - dis[y]) - 1 代码 #include <iostream> using namespace std; int T, x, y, xx, yy; int fa[3…
银河英雄传说 题目链接 并查集时记录下以i为首的队列的长度(如果存在这个队列)num[i],便于合并, 和点i到队首的距离front[i],便于查询(在find时维护) #include<iostream> #include<cstring> #include<cstdio> using namespace std; #define N 30010 #define abs(x) ((x)>0?(x):-(x)) ; int m,fa[N],front[N],num…
P1196 银河英雄传说 367通过 1.1K提交 题目提供者该用户不存在 标签并查集NOI系列2001(或之前) 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 莱因哈特什么鬼? 私人代码备份,请勿复制 话说时间... 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压 顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点…