牛客多校三-G题-Coloring Tree (bfs+计数)

该博客探讨了一道关于树染色的算法题,要求给定一棵有n个节点的树,使用k种颜色进行染色,使得颜色相同的节点间的最短路径长度为D。文章介绍了如何计算满足特定colorness(D)的染色方案数,主要通过两次宽度优先搜索(BFS)策略实现。首先,从根节点开始第一次BFS,然后对每个节点进行第二次BFS,统计相邻且颜色已分配的节点数量,据此更新满足条件的方案数。
摘要由CSDN通过智能技术生成

题目链接

题意:有一颗有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秒
 *******************************************************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值