目录
1.trie树
N=10
son=[[0 for i in range(26)]for j in range(N)]
cnt=[0 for i in range(N)]
idx=0
str=""
def insert(string):
global idx
p=0
for i in range(len(string)):
u=ord(string[i])-ord('a')
if not son[p][u]:
idx+=1
son[p][u]=idx
p=son[p][u]
cnt[p]+=1
def query(string):
p=0
for i in range(len(string)):
u=ord(string[i])-ord('a')
if not son[p][u]:
return 0
p=son[p][u]
return cnt[p]
n=int(input())
for i in range(n):
op,string=input().split()
if op=='I':
insert(string)
else:
print(query(string))
# 5
# I abc
# Q abc
# Q ab
# I ab
# Q ab
2.143. 最大异或对 - AcWing题库
N=35
son=[[0 for i in range(2)]for j in range(N)]
idx=0
def insert(value):
global idx
p=0
for i in range(30,-1,-1):
u=value>>i&1
if not son[p][u]:
idx+=1
son[p][u]=idx
p=son[p][u]
return
def search(value):
p=0
result=0
for i in range(30,-1,-1):
u=value>>i&1
if son[p][not u]:
result+=1<<i
p=son[p][not u]
else:
p=son[p][u]
return result
n=int(input())
a=list(map(int,input().split()))
for i in a:
insert(i)
ans=0
for i in a:
ans=max(ans,search(i))
print(ans)
3.836. 合并集合 - AcWing题库
N=100010
fa=[i for i in range(N)]
n,m=map(int,input().split())
def find(x):
if fa[x]!=x:
fa[x]=find(fa[x])
return fa[x]
for _ in range(m):
op,a,b=input().split()
a,b=int(a),int(b)
if op=='M':
fa[find(a)]=find(b)
else:
if find(a)==find(b):
print("Yes")
else:
print("No")
4.连通块中的数量
n,m=map(int,input().split())
fa=[i for i in range(n+2)]
s=[1 for i in range(n+2)]
def find(x):
if fa[x]!=x:
fa[x]=find(fa[x])
return fa[x]
for i in range(m):
list=input().split()
if list[0]=='C':
a,b=map(int,list[1:])
if find(a)==find(b):
continue
fa[find(a)]=find(b)
s[b]+=s[a]
elif list[0]=="Q1":
a,b=map(int,list[1:])
if find(a)==find(b):
print("Yes")
else:
print("No")
else:
a=int(list[1])
print(s[find(a)])
5.240. 食物链 - AcWing题库
N=50010
fa=[i for i in range(N)]
d=[0 for i in range(N)]
def find(x):
if fa[x]!=x:
q=find(fa[x])
d[x]+=d[fa[x]]
fa[x]=q
return fa[x]
n,m=map(int,input().split())
res=0
for _ in range(m):
t,x,y=map(int,input().split())
if x>n or y>n:
res+=1
continue
else:
fax=find(x)
fay=find(y)
if t==1:
if fax==fay and (d[x]-d[y])%3:
res+=1
elif fax!=fay:
fa[fax]=fay
d[fax]=d[y]-d[x]
else:
if fax==fay and (d[x]-d[y]-1)%3:
res+=1
elif fax!=fay:
fa[fax]=fay
d[fax]=d[y]+1-d[x]
print(res)