AcWing 1253. 家谱
原题链接
简单
作者:
柠檬茶去冰
,
2024-12-15 12:02:06
,
所有人可见
,
阅读 1
# 下标是键,p[x]是值 #值对应的是祖宗
#x对应的是键,即下标 #p[i for i in range(10010)]其实1:1,2:2,3:3,...,i:i,经过find后成1:父,2:父2,3:父,4:父1,5:父,i:父某。
#所以在这里是name:ancestor,经过find后同上面
import sys
def find(p,x):
t=x
while p[x]!=x:
x=p[x]
while t!=x:
t,p[t]=p[t],x
return x
##if p[x]!=x:
## p[x]=find(p,p[x]) ##栈溢出
##return p[x]
input = sys.stdin.read # 使用标准输入读取数据
data = input().strip().splitlines()
p={}
for item in data:
if item=='$':
break
op,name=item[0],item[1:]
if op=='#':
father=name
if name not in p:
p[name]=name
elif op=='+':
p[name]=father
else:
ancestor=find(p,name)
print(name,ancestor)