AcWing 837. 连通块中点的数量
原题链接
简单
作者:
柠檬茶去冰
,
2024-12-13 20:44:36
,
所有人可见
,
阅读 2
def find(x):
t=x
while p[x]!=x:
x=p[x]
while t!=x:
t,p[x]=p[x],x
return x
n,m=map(int,input().split())
p=[i for i in range(n+1)]
size=[1]*(n+1) #仅有集合的头要size的意义
while m:
try:
op=input().split()
except EOFError:#莫名会有EOFError
break #????????????????
if op[0]=='C':
a, b = int(op[1]), int(op[2])
if find(a)==find(b): #如果是if a==b:则会把a和b在同一集合的size相加
continue #导致size*2,出现错误答案
size[find(b)]+=size[find(a)]
p[find(a)]=find(b) #将a的祖宗连到b的祖宗
elif op[0]=='Q1':
a, b = int(op[1]), int(op[2])
if find(a)==find(b):
print('Yes')
else:
print('No')
else:
print(size[find(int(op[1]))])
m-=1