Z0423 树的染色2

Description

一个n个节点的树。

现在用k种颜色,给树上的每个节点染色

要求:

任何两个距离不大于2的不同节点被染的颜色不同。

由于答案可能过大,请将其对10^9+7取模。

Format

Input

第一行一个数n,k,含义如题

接下来共有n-1行,两个数u,v表示u和v之间存在一条边

1≤n,k≤1e5,

Output

如题

Samples

输入数据 1

4 3
1 2
2 3
3 4

Copy

输出数据 1

6

思路

可以用小学学的乘法原理,算出每个点染的色有几种可能性,最后一起乘就行了。

那么,怎么算出每个点染的色有几种可能性呢?

首先,对于该树的根(1号节点)肯定有k种染色方法。

然后对于1号节点的子节点,肯定就都有k-1种可能性了。

对吗?

我们来考虑一个问题:如果1号节点拥有的子节点数>1的话,那么第一个被遍历到的子节点有k-1种可能,这没错。但是第二个呢?它不仅不能与父节点的颜色相同,而且还不能与兄弟节点重合,所以它只有k-2种可能,以此类推的话, 第三个被遍历到的子节点有k-3种可能,第四个被遍历到的子节点有k-4种可能……

所以总结出来一个公式:

如果当前节点所遍历到的第一个子节点有x种染色方法,那么第n个子节点就有x-n+1种染色方法

那么处理完兄弟节点之间的关系,我们再来看看父子的关系。

当遍历到深度为3(根节点深度为1)的节点时, 第一个节点就只有k-2种可能(因为它有爷爷节点了)。

那么思考一下:当遍历到深度为4的节点时, 第一个节点是有k-3种可能吗?这里十分易错,需要思考清楚。

显然,此时第一个节点就还是只有k-2种可能。那么这就好办了。

总结一下我们的结论:

  1. 如果当前节点所遍历到的第一个子节点有x种染色方法,那么第n个子节点就有x-n+1种染色方法
  2. 如果当前节点深度为1,则x=k
  3. 如果当前节点深度为2,则x=k-1
  4. 如果当前节点深度>2,则x=k-2

代码

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,k,u,v,a[10000001],ans = 1,mod = 1e9 + 7;
vector<int> vec[1000001];
void dfs(int fa,int x,int dp,int p)
{int se = k;if(dp > 1) se--;if(dp > 2) se--;a[x] = se - p;a[x] %= mod;p = 0;for(int i = 0;i < vec[x].size();i++)if(vec[x][i] != fa){dfs(x,vec[x][i],dp + 1,p);p++;}
}
signed main()
{cin>>n>>k;for(int i = 1;i < n;i++){cin>>u>>v;vec[u].push_back(v);vec[v].push_back(u);}dfs(0,1,1,0);for(int i = 1;i <= n;i++){//cout<<a[i]<<' ';if(a[i] <= 0){ans = 0;break;}ans = (ans * a[i]) % mod;}cout<<ans;return 0;
}

解压

如果这篇博客对您有帮助的话,请点赞关注收藏支持一下吖!(≧∇≦)ノ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/672389.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#(C Sharp)学习笔记_Switch条件判断分支语句【六】

Switch语句 Switch在一些计算机语言中是保留字&#xff0c;其作用大多情况下是进行判断选择。以C语言来说&#xff0c;switch&#xff08;开关语句&#xff09;常和case break default一起使用。 Switch语句就相当于是else if语句&#xff0c;有着很相似的作用&#xff1a;根据…

过年送你三句话!部门大战积雪!飞机延误,掌声响起?——早读

你到家了吗&#xff1f; 引言代码第一篇 也评 以雪为令&#xff0c;多滴部门全力以赴迎战寒潮第二篇 人民日报 飞机延误20分钟&#xff0c;但他走进机舱时&#xff0c;掌声响起&#xff01;第三篇 人民日报 【夜读】快过年了&#xff0c;这三句话送给你第四篇&#xff08;跳&am…

Java基于SpringBoot+Vue的垃圾分类网站的实现

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

“Nginx”介绍和使用

什么是 Nginx&#xff1f; Nginx&#xff08;发音为“engine-x”&#xff09;是一款开源的、高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3 代理服务器。Nginx 由 Igor Sysoev 于 2004 年创建&#xff0c;并在 BSD 许可下发布。 Nginx 的特点 高性能&#…

LeetCode第1381题 - 设计一个支持增量操作的栈

题目 请你设计一个支持下述操作的栈。 实现自定义栈类 CustomStack &#xff1a; CustomStack(int maxSize)&#xff1a;用 maxSize 初始化对象&#xff0c;maxSize 是栈中最多能容纳的元素数量&#xff0c;栈在增长到 maxSize 之后则不支持 push 操作。void push(int x)&#…

如何使用 uniapp 开发(一)

1、下载 hbuilderx 编辑器 https://www.dcloud.io/hbuilderx.html 2、下载 微信开发者工具 https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 3、使用hbuilder编辑器&#xff0c;开发微信小程序的时候需要借助 微信开发者工具显示&#xff0c;所以需…

动态内存管理(2)

文章目录 4. 几个经典的笔试题4.1 题目14.2 题目24.3 题目34.4 题目4 5. C/C程序的内存开辟6. 动态通讯录7. 柔性数组7.1 柔性数组的特点7.2 柔性数组的使用7.3 柔性数组的优势 4. 几个经典的笔试题 4.1 题目1 #include <stdio.h> #include <stdlib.h> #include …

Prompt Engineering实战-构建“哄哄模拟器”

目录 一 背景 二 “哄哄模拟器”的Prompt Prompt 的典型构成 三 操作步骤 3.1 创建对话 3.2 游戏测试 一 背景 前几天《AI 大模型全栈工程师》第二节课讲了“Prompt Engineering&#xff0c;提示工程”&#xff0c;里面提到一些prompt相关的技巧&#xff0c;原则&#xf…

复杂人像背景分割解决方案

随着人工智能和图像处理技术的不断发展&#xff0c;人像处理已成为企业宣传、产品展示、线上教育等领域不可或缺的一环。然而&#xff0c;面对复杂多变的人像背景&#xff0c;如何实现精准、高效的分割&#xff0c;一直是困扰企业的技术难题。为此&#xff0c;美摄科技凭借其领…

NLP_循环神经网络(RNN)

文章目录 RNN结构RNN实战RNN小结 RNN结构 NPLM 在处理长序列时会面临一些挑战。首先&#xff0c;由于它仍然是基于词的模型&#xff0c;因此在处理稀有词汇或者词汇表外的词汇时效果不佳。其次&#xff0c;NPLM不能很好地处理长距离依赖关系。而上面这两个局限&#xff0c;恰恰…

基于spring cloud alibaba的微服务平台架构规划

平台基础能力规划&#xff08;继续完善更新…&#xff09; 一、统一网关服务&#xff08;独立服务&#xff09; 二、统一登录鉴权系统管理&#xff08;独立服务&#xff09; 1.统一登录 2.统一鉴权 3.身份管理 用户管理 角色管理 业务系统和菜单管理 部门管理 岗位管理 字典管…

IDEA 推荐插件

grep-console 输出日志换颜色 MybatisLogFormat 直接复制mybatis的日志成完整的SQL SequenceDiagram 生成时序图

网络故障的排错思路

一、网络排错必备知识 1、网络通信的基础设备和其对应的OSI层次 在网络通信中&#xff0c;了解基础设备如交换机、三层交换机、路由器和防火墙以及它们在OSI七层模型中 的作用至关重要。对于网络管理员和工程师来说&#xff0c;深入了解这些设备在OSI模型中的位置和功能可 …

70.SpringMVC怎么和AJAX相互调用的?

70.SpringMVC怎么和AJAX相互调用的&#xff1f; &#xff08;1&#xff09;加入Jackson.jar&#xff08;2&#xff09;在配置文件中配置json的消息转换器.(jackson不需要该配置HttpMessageConverter&#xff09; <!‐‐它就帮我们配置了默认json映射‐‐> <mvc:anno…

人力资源如何实现量化管理,数据分析的方法与技巧详解

一、教程描述 本套教程以数据思维为主&#xff0c;将数据分析技术&#xff0c;应用到HR招聘、薪酬、绩效、人才盘点、培训等模块的日常工作中&#xff0c;从而实现人力资源的量化管理&#xff0c;可以提升人力资源HR的工作效能&#xff0c;进而提高企业人力资源的管理水平。本…

Rust入门

文章目录 一、HelloWorld二、控制台输入 以最简单的两个Rust程序例子入门Rust。首先需要下载安装Rust&#xff0c;之后在VSCode或Clion中运行Rust需要下载Rust插件 一、HelloWorld fn main(){println!("Hello World!"); }二、控制台输入 use std::io::stdin; fn …

天地伟业接入视频汇聚/云存储平台EasyCVR详细步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

Oracle-一次提升10倍的跑批优化

问题背景&#xff1a; 一早刚上班&#xff0c;应用开发就在群里就发了一个语句执行ORA-01555的报错&#xff0c;说他们的一条跑批语句昨天晚上跑了1个小时还没跑完&#xff0c;最后出现了错误ORA-01555: snapshot too old: rollback segment number&#xff0c;让我们帮忙看一下…

MATLAB | 绘图复刻(十四) | 右侧对齐桑基图,及工具函数SSankey更新

hey 真的好久不见了&#xff0c;本期既是一期绘图复刻教程&#xff0c;也是我写的工具函数的版本更新&#xff0c;本期复刻的图片来自《Nature》&#xff1a; Elmarakeby, H.A., Hwang, J., Arafeh, R. et al. Biologically informed deep neural network for prostate cancer…

Vue代理模式和Nginx反向代理(Vue代理部署不生效)

在使用axios时&#xff0c;经常会遇到跨域问题。为了解决跨域问题&#xff0c;可以在 vue.config.js 文件中配置代理&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServer: {port: 7070,prox…