您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页【纪中集训2019.08.25】【JZOJ6371】树

【纪中集训2019.08.25】【JZOJ6371】树

来源:华佗小知识

 

题意:

  给定一棵$n$个节点的无根树,可以对边黑白染色。求对于每个点有多少种染色方案,使得它到任意点的路径上至多经过一条黑边。对$10^9+7$取模。

  $1\le n \le 10^5$

 

分析:

  可以看出,这题就是把每个点做根的情况都求一遍。

  先来看链的情况:以$i$号点做根,那么左侧的边总共只能有一条染黑;右侧同理。由乘法原理可得答案为$i\times (n-i+1)$。

  考虑树形DP。假设确定$1$号点为根节点,设$f_i$表示由下至上$i$点及其子树的答案,那么很容易得到$$f_i=\prod\limits_{j\in son_i} ( f_j+1 )$$

  算法是儿子到父亲的这条边染不染黑。染了那么整棵子树都不能再染,不染就是直接传子树答案。兄弟之间对父亲的贡献互不干扰,所以要乘起来。

  现在来考虑怎么换根。

  发现我们的答案和深度无关,同一棵子树的贡献总是一定的,考虑记忆化。

  但是换根之后树的形态发生变化,不能用点代表子树。

  发现点不能代表子树的原因是遍历子树的方向会有不同。即:可以用不同的边进入同一点。

  那么就可以对边记忆化。完成!

 

实现:

 

小结:

  没什么好说的。认真水题吧。

转载于:https://www.cnblogs.com/Hansue/p/11408033.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务