def find(x):
global fa
if x == fa[x]:
return x
else:
fa[x] = find(fa[x])
return fa[x]
def merge(i,j):
global fa,rank
x = find(i)
y = find(j)
if rank[i] <= rank[j]:
fa[x] = y
else:
fa[y] = x
if rank[x] == rank[y] and x!= y:
rank[y] = rank[y]+1
def f(n,m):
Rst = [0 for i in range(n+1)]
for i in range(m):
a,b,c = map(int,input().strip().split())
if a == 1:
merge(b,c)
elif a == 2:
for i in range(1,n+1):
if find(i) == find(b):
Rst[i] = Rst[i]+c
for i in range(1,n+1):
print(Rst[i],end=' ')
if __name__ == '__main__':
n,m = map(int,input().strip().split())
fa = [i for i in range(n+1)]
rank = [1 for i in range(n+1)]
f(n,m)
银河战舰问题(并查集改编)
def find(x):
global fa,size,dis
if x == fa[x]:
return x
t1 = fa[x]
t2 = find(t1)
fa[x] = t2
dis[x] = dis[x] + dis[t1]
return t2
def merge(x,y):
global fa,size,dis
tx = find(x)
ty = find(y)
fa[tx] = ty
dis[tx] = size[ty]
size[ty] = size[ty]+size[tx]
size[tx] = 0
def f(m):
global fa,size,dis
for i in range(m):
order,x,y = input().strip().split()
x = int(x)
y = int(y)
if order == 'M':
merge(x,y)
elif order == 'C':
tx = find(x)
ty = find(y)
if tx != ty:
print(-1)
else:
print(abs(dis[x]-dis[y])-1)
if __name__ == '__main__':
fa = [i for i in range(30001)]
size = [1 for i in range(30001)] #表示第i条队列有多少飞船
dis = [0 for i in range(30001)] #表示第i艘飞船距离队首多远
m = int(input())
f(m)