数据范围很小,我们可以枚举每一个点作为根节点,然后通过遍历,即可计算当前根节点到其他所有节点的二进制值即可。

对于根节点到孩子节点的值大小,可以通过实现更新,其中是节点的权值。

注意点: 对于无向图形式的树遍历,需要记录转移来源,也就是父亲节点是谁,这样子节点才不会走回头路。

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)