欢迎光临散文网 会员登陆 & 注册

2021上海ICPC Edge Groups

2022-04-12 17:29 作者:Asunataisiki  | 我要投稿

ac.nowcoder.com/acm/problem/231126

题意: 给你一颗树,要求对 n%20-%201 条边两两分组,每组有一个公共节点,求方案数

思路:对于节点 u,如果有偶数条边与其相连,那么可以进行两两分组,如果只有奇数条边,那么两两分组之后必然剩下一条边没有被分组,此时就需要一条 fa%20%5Crightarrow%20u  (fau的父节点) 边来与这条剩下的边匹配

因此,对于 u 的子节点 v

  •  如果对 v 有贡献的边数为偶数个,那么v 节点对 u 节点也是有贡献的,即 u%20%5Crightarrow%20v 这条边是加入计数的

  •  反之,  u%20%5Crightarrow%20v 这条边是要加入对  v 的贡献的,则不计入  u 中

对于每个节点,如果其有贡献边数是偶数,就两两分组,如果是奇数,那么加上一条与父节点相连的边就变成偶数了

所以问题转化为 x 条边中两两组合有多少种方案数,计算方式为:%5Cfrac%7BC_%7Bx%7D%5E2C_%7Bx%20-%202%7D%5E2C_%7Bx%20-%204%7D%5E2%20...C_%7B2%7D%5E2%20%7D%7BA_%7Bx%20%2F%202%7D%5E%7Bx%20%2F%202%7D%20%7D%20

化简为:(n%20-%201)%20*%20(n-2)*..*3*1

如何计算贡献边呢?

显然是一个递归问题,考虑树形dp,定义dp%5Bu%5D表示以u为根节点的树可以产生多少种方案数,所以根据乘法原理,dp%5Bu%5D%20*%3D%20dp%5Bv%5D%20



2021上海ICPC Edge Groups的评论 (共 条)

分享到微博请遵守国家法律