本题需要统计在一棵树上恰好关闭 k 条边后,所有连通块内鸽子数之和均为偶数的方案数。算法核心思路如下:
可行性判断
首先计算所有广场的鸽子总数 S=∑i=1nai。若 S 为奇数,则无论怎样划分,至少会有一个连通块的和为奇数,此时对所有 k 方案数均为 0,可直接输出。
子树和与可关闭边
若 S 为偶数,选取广场 1 作为根节点进行深度优先遍历。在遍历过程中,维护以每个节点 u 为根的子树中鸽子总数 sumu。
在城市的一角,有 n 个广场,由 n−1 条步行街相连,整个网络连通且没有环路(任意两个广场之间有且仅有一条路径)。每个广场上生活着一些鸽子,第 i 个广场上有 ai 只鸽子。
市长计划关闭一部分步行街,使得整个网络被分割成若干个连通的区域。为了便于鸽子成对飞行,他要求每个区域内部鸽子的总数必须能被 2 整除。
对于每个 k=1,2,…,n−1,请你计算:恰好关闭 k 条步行街之后,能够使得所有区域的鸽子总数均能被 2 整除的方案数。如果不存在任何方案,对应的答案为 0。两种方案若关闭的步行街集合不同,则视为不同的方案。
由于答案可能很大,你需要输出每个 k 对应的方案数对 109+7 取模的结果。
数据范围:广场的数量 n 满足 2≤n≤105,每个广场上的鸽子数量 ai 满足 1≤ai≤109。保证输入的步行街构成一个连通且无环的图。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册