题意:有一颗有n个节点的树,现在你有k种颜色,要给树的每个节点上颜色,然后给出一个D,表示上完 颜色后树的colorness为D,colorness的定义为树上颜色相同的点的最短的距离。求colorness等于D的上色方案数。
思路:
我们定义f(D) 为colorness大于等于D的方案数,那么ans=f(D)-f(D+1);
对于如何求f(D),通过第一个bfs从根向下遍历树,对于bfs顺序前遇到的每个节点,我们在通过另一个bfs去找到和这个节点相邻的所有距离小于D的并且已经上色的节点数num,因为是通过bfs顺序上色的原因,可以发现num个节点的颜色是各不相同的,如果num>=k,说明当前节点已经没有颜色可以上,ans=0,否则ans*=(k-num);
f(D+1)同理;
AC代码:
/*************************************************************************
> File Name: nkdx3-G.cpp
> Author: cyh
> Mail:
> Created Time: 2018年07月27日 星期五 10时05分35秒
*******************************************************************