数据范围很小,我们可以枚举每一个点作为根节点,然后通过遍历,即可计算当前根节点到其他所有节点的二进制值即可。
对于根节点到孩子节点的值大小
,可以通过
实现更新,其中
是节点
的权值。
注意点: 对于无向图形式的树遍历,需要记录转移来源,也就是父亲节点是谁,这样子节点才不会走回头路。
import sys
input = sys.stdin.readline
if __name__ == '__main__':
n,l,r = map(int,input().split())
w = list(map(int,list(input().strip())))
g = [[] for _ in range(n)]
for _ in range(n-1):
u,v = map(int,input().split())
u -= 1
v -= 1
g[u].append(v)
g[v].append(u)
res = 0
def dfs(cur: int,fa: int,s: int) -> None:
global res
s = (s * 2) + w[cur]
for nxt in g[cur]:
if nxt == fa: continue
v = (s * 2) + w[nxt]
res += int(l <= v <= r)
dfs(nxt,cur,s)
for i in range(n):
dfs(i,-1,0)
print(res)