当前位置: 首页 > news >正文

小红树上染色【牛客tracker 每日一题】

小红树上染色

时间限制:1秒 空间限制:256M

网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小红拿到了一棵树,初始所有节点都是白色。
小红希望染红若干个节点,使得不存在两个白色节点相邻。
小红想知道,共有多少种不同的染色方案?
由于答案过大,请对10 9 + 7 10^9+7109+7取模。

输入描述:

第一行输入一个正整数n nn,代表节点数量。
接下来的n − 1 n−1n1行,每行输入两个正整数u , v u,vu,v,代表节点u uu和节点v vv有一条边连接。
1 ≤ n ≤ 10 5 1≤n≤10^51n105
1 ≤ u , v ≤ n 1≤u,v≤n1u,vn

输出描述:

一个整数,代表染色的方案数。

示例1

输入:

2 1 2

输出:

3

说明:

第一个方案:只染1 11号节点。
第二个方案:只染2 22号节点。
第三个方案:同时染1 11号和2 22号节点。
请注意,如果每个节点都不染色是不合法的,因为这样会导致两个白色节点相邻。

解题思路

本题核心是树形动态规划求解树上染色的合法方案数,约束为不存在两个相邻的白色节点。定义dp[u][0]表示节点u染白色、其子树满足规则的方案数,dp[u][1]表示节点u染红色的方案数。状态转移:父节点为白时子节点必须全红;父节点为红时子节点可白可红。通过深度优先搜索自底向上递推DP值,总方案数为根节点两种状态之和,减去全白的非法方案后即为答案,结果对10 9 + 7 10^9+7109+7取模。算法时间复杂度O ( n ) O(n)O(n),完美适配n ≤ 10 5 n \le 10^5n105的大数据规模。

总结

核心逻辑:树形D P DPDP枚举节点染色状态,按约束完成状态转移,排除全白的非法方案。
关键操作:D F S DFSDFS遍历树结构,递推计算染色方案数,总方案减1 11得到合法结果。
效率保障:线性时间复杂度,无冗余计算,高效处理大规模树形数据。

代码内容

#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e4+10;constll p=1e9+7;constll INF=1e18;constll M=2e3+10;intmain(){ll n;cin>>n;vvtmp(n+1);for(ll i=0;i<n-1;i++){ll u,v;cin>>u>>v;mp[u].push_back(v);mp[v].push_back(u);}vvtdp(n+1,vector<ll>(2));autodfs=[&](autodfs,ll u,ll parent)->void{dp[u][0]=1;dp[u][1]=1;for(autov:mp[u]){if(v==parent)continue;dfs(dfs,v,u);dp[u][0]=(dp[u][0]*dp[v][1])%p;dp[u][1]=(dp[u][1]*(dp[v][0]+dp[v][1]))%p;}};dfs(dfs,1,0);cout<<(dp[1][0]+dp[1][1])%p<<endl;return0;}
http://www.cnnetsun.cn/news/1934277.html

相关文章:

  • 2026 年两款服务器面板内存占用测试:宝塔面板和 1Panel 表现如何
  • 如何在浏览器中免费查看和测量3D模型:Online3DViewer完整指南
  • 别浪费你的SD卡了!实测Surface Pro外置运行Ubuntu:性能调优与避坑全记录
  • AI法律咨询不是“问答机器人”:2026奇点大会解密LLM+法律知识图谱+裁判规则引擎的3层耦合验证机制
  • Cadence Virtuoso导入TSMC 65nm PDK保姆级避坑指南:从解压到仿真成功全流程
  • LAV Filters技术全景:Windows多媒体生态的FFmpeg DirectShow实现
  • 2026届必备的AI写作平台实测分析
  • 2026最新|OpenClaw(小龙虾)Windows一键部署教程,内置28万免费Token直接用
  • 从零上手MCP:解锁大模型与外部工具联动的标准方式
  • Transformer位置编码的另一种思路:手把手教你实现Relative Position Representations
  • 告别Turbo码:深入5G NR LDPC码的速率匹配与HARQ机制(含TBS计算避坑点)
  • 雨云(Rainyun)优惠全攻略:新用户 5 折、优惠券领取与使用指南
  • 【Claude模型家族技术解析】Anthropic从Opus到Haiku的架构演进、能力矩阵与2026全景
  • 逆向工程实战:解码大众奥迪碟盒通信协议,打造个性化车载音频中枢
  • 基于SpringBoot+Vue小区报修系统的设计与实现(源码+论文+部署)
  • 冷笑话10则
  • 终极DBeaver驱动包:一站式解决数据库连接难题的完整指南
  • 3分钟快速汉化:Axure RP中文语言包终极指南
  • FPGA资源优化指南:转置型FIR滤波器位宽计算与乘法器节省技巧
  • 2026届最火的六大AI科研工具实测分析
  • 不只是画图:在Qt项目中集成QWT 6.1.6,打造专业数据可视化界面
  • FigmaCN中文界面插件:3步实现设计效率翻倍的终极指南
  • MySQL数据备份策略如何制定_利用mysqldump实现全量与增量备份
  • 从模块到整机:蓝牙BQB认证的实战路径与成本考量
  • 怎么管理开启了审计日志的金融级数据库实例_合规访问控制
  • 从零开始:在Android Studio中高效配置与调试AOSP源码
  • 从播客到ASMR:用Python给音频做“美容”,聊聊降噪背后的信号处理小知识
  • 病理AI入门实战:在Ubuntu 22.04上,用CLAM+CONCH v1.5搞定WSI特征提取(附避坑指南)
  • 黑马点评 秒杀业务「一人一单」并发安全
  • YOLOv8 模型训练轨道交通障碍物检测数据集 通过训练出的轨道交通安全道路障碍物数据集的权重 建立深度学习铁路轨道障碍物检测系统