luogu P1196 [NOI2002]银河英雄传说

原创 2018年04月15日 15:51:03

题目传送门:https://www.luogu.org/problemnew/show/P1196



题意:

有n个操作。

[1]M x y表示将x所在列的所有元素接在y列后;

[2]C x y如果x和y不在同一列,输出-1;否则输出x~y中有多少个元素。



思路:

并查集。

详见代码。



代码:

#include<cstdio>
#include<cmath>
#include<cstdlib>
	int n;
	int fa[30010],p[30010],size[30010];
/*
fa[i]表示i的祖先
p[i]表示i前面有多少艘战舰
size[i]表示i所属列的长度 
*/
int find(int x)
{
	if(x==fa[x]) return x;
	int t=find(fa[x]);
	p[x]+=p[fa[x]];//跟新当前点前面战舰的数量
	return fa[x]=t;
}
int main()
{
	char s[5];
	int x,y;
	scanf("%d",&n);
	for(int i=1;i<=30000;i++)
		fa[i]=i,p[i]=0,size[i]=1;
	for(int i=1;i<=n;i++)
	{
		scanf("%s %d %d",s+1,&x,&y);
		int t1=find(x),t2=find(y);//找到t1、t2的祖先,M操作一定处理的是祖先
		if(s[1]=='M')
		{
			p[t1]+=size[t2];//将t1接在t2后,t1前面的战舰数自然多了size[t2]个
			fa[t1]=t2;//合并t1、t2
			size[t2]+=size[t1];//将t1接在t2后,新t2的长度自然长了size[t1]个
			size[t1]=0;//将t1接在t2后,新的t1的长度就变为了0 
		}
		else
		{
			printf("%d\n",t1!=t2?-1:abs(p[x]-p[y])-1);//不在同一列,即x、y的祖先不同,结果为-1,否则为后者(详见下图) 
		}
	}
}



附图:

我们求1~5的中战舰的个数(看图可知为3)。

可知5-1-1=3

则推出ans=|x-y|-1(其中|a|表示a的绝对值)

IT英语入门

-
  • 1970年01月01日 08:00

洛谷 P1196 NOI2002 银河英雄传说

并查集 NOI2002
  • SilverNebula
  • SilverNebula
  • 2016-05-14 11:51:36
  • 423

[LUOGU] P1196 [NOI2002]银河英雄传说

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

COGS 260. [NOI2002] 银河英雄传说 解题报告

260. [NOI2002] 银河英雄传说 【问题描述】     公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓...
  • Janis_z
  • Janis_z
  • 2016-09-28 11:21:25
  • 588

NOI2002/Luogu P1196 银河英雄传说 解题报告

开门见山看题目: 题目描述公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆...
  • u012709325
  • u012709325
  • 2016-08-27 10:43:50
  • 353

NOI2002银河英雄传说(带边权的并查集)

!!带边权的并查集 有时a与b之间的关系比较复杂,比如关系式有向的,或者关系是一个数。这时想要知道两者之间的关系,首先要通过代表元是否相同来知道这两者的关系能否确定,若能确定,再根据两者分别和根节点...
  • liangzhaoyang1
  • liangzhaoyang1
  • 2016-03-15 21:32:49
  • 2016

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

【题解】 建立并查集,并维护每个结点到root的距离、每个连通块中结点的个数sum  "M i j"即:将father(i)到root的距离改为 sum[father(y)],将sum[fathe...
  • cjk_cjk
  • cjk_cjk
  • 2015-06-29 17:14:41
  • 760

洛谷P1196 [NOI2002]银河英雄传说

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

【NOI2002】银河英雄传说

Overview有M=30000M=30000个点,NN个操作(N≤500000N\leq 500000)。 每次操作如下: (1)MM ii jj:将ii所在的排列合并到jj所在的排列; (2...
  • y20070316
  • y20070316
  • 2016-01-29 16:39:49
  • 526

洛谷 P1196 [NOI2002 D1T1] 银河英雄传说

并查集
  • SenyeLicone
  • SenyeLicone
  • 2016-10-30 23:29:33
  • 400
收藏助手
不良信息举报
您举报文章:luogu P1196 [NOI2002]银河英雄传说
举报原因:
原因补充:

(最多只允许输入30个字)