[NOI2002]银河英雄传说

带权并查集

有蜘蛛纸牌内味。

code:

#include<bits/stdc++.h>
using namespace std;
int T,a,bb,fa[30001],b[30001],s[30001];
char ch;
int fd(int x){
	if(x==fa[x])
		return x;
	int tp=fa[x];
	fa[x]=fd(fa[x]);
	s[x]+=s[tp];
	return fa[x];
}
int main(){
	cin>>T;
	for(int i=1;i<=30000;i++)
		fa[i]=i,b[i]=1;
	while(T--){
		cin>>ch;
		scanf("%d%d",&a,&bb);
		int faa=fd(a),fbb=fd(bb);
		if(ch=='M'){
			fa[faa]=fbb;
			s[faa]+=b[fbb];
			b[fbb]+=b[faa];
		}
		else{
		
			if(faa!=fbb)
				printf("-1\n");
			else
				printf("%d\n",abs(s[a]-s[bb])-1);
		}
	}return 0;
}
上一篇:博客园文章自动生成目录


下一篇:蛋糕(区间DP)+东方记者(普通DP)