对于一条路径的权值为
请你统计树中有多少条简单路径的权值为偶数。
我们认为
第一行一个整数,表示树的结点总数。
第二行个整数,第
个为
,表示结点的权值。
接下来行,每行两个整数
,表示结点
和结点
之间通过一条无向边连接。
一个整数,表示有多少条简单路径的权值为偶数。
4 12 16 3 4 1 2 1 3 2 4
6
import sys from collections import defaultdict n=int(input()) sys.setrecursionlimit(200005) val=[0]+list(map(int,input().strip().split())) edge=defaultdict(list) for t in range(n-1): u,v=list(map(int,input().strip().split())) edge[u].append(v) edge[v].append(u) ans=0 def dfs(cur,p): global ans flag=not val[cur]%2 o=1 if flag else 0 son=0 sum_=0 square_=0 for i in edge[cur]: if i==p: continue c=dfs(i,cur) if flag: son+=c sum_+=c square_+=c**2 res= o+son+(sum_**2-square_)//2 ans+=res return o+son dfs(1,0) print(ans)