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

题解:AT_abc036_d [ABC036D] 塗り絵

题意

有一棵由 $N$ 个点 $N-1$ 条边构成的树,求出树上每个点染成白色或黑色,但相邻两个点不能同时染成黑色的染色方案数量,并取模 $10^9+7$。

思路

对于这种求合法方案数的题目,一般可以考虑 $dp$ 。设 $dp_{i,1}$ 表示第 $i$ 个节点为染成黑色的方案数。设 $dp_{i,0}$ 表示第 $i$ 个节点为染成白色的方案数。

再利用乘法原理,可得出动态转移方程。
$$dp_{i,1} \gets dp_{i,1} \times dp_{j,0},$$
$$dp_{i,0} \gets dp_{i,0} \times (dp_{j,0}+dp_{j,1}).$$
然后输出 $dp_{1,1}+dp_{1,0}$ 即可。

记得取模!!!

code

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int N=100005;
int n,u,v,dp[N][5],tot=1,head[N];
struct op
{int to,next;
}arr[N<<1];
void edge(int x,int y){arr[tot].to=y;arr[tot].next=head[x];head[x]=tot++;
}
void dfs(int x,int fa){dp[x][0]=1,dp[x][1]=1;//初始化for(int i=head[x];i;i=arr[i].next){int y=arr[i].to;if(fa==y)continue;dfs(y,x);dp[x][0]*=dp[y][0]+dp[y][1];//动态转移方程dp[x][1]*=dp[y][0];//动态转移方程dp[x][1]%=mod;dp[x][0]%=mod;}
}
signed main(){scanf("%lld",&n);for(int i=1;i<n;i++){scanf("%lld%lld",&u,&v);edge(u,v),edge(v,u);//建边}//输入dfs(1,0);printf("%lld\n",(dp[1][0]+dp[1][1])%mod);//输出return 0;
} 
http://www.jsqmd.com/news/29308/

相关文章:

  • 2025 年 11 月高压锅炉无缝钢管,方形无缝钢管,16Mn 无缝钢管厂家最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • [论文笔记] Machine-Learning-Guided Selectively Unsound Static Analysis
  • 2025 年 11 月精密无缝钢管,合金无缝钢管,厚壁无缝钢管厂家最新推荐,实力品牌深度解析采购无忧之选!
  • 题解:AT_abc166_f [ABC166F] Three Variables Game
  • Awesome Neovim - 精选Neovim插件大全
  • 窗口函数
  • 别只怪客户端宕机!还有这些导致 Redis 分布式锁“死锁”的原因 - 公众号
  • CCF CSP-S2 2025 游记
  • CSP-S 2025 总结
  • LangChain v1.0 中间件详解:彻底搞定 AI Agent 上下文控制
  • 【EF Core】“多对多”关系与跳跃导航
  • DeepSeek-MTP多token预测
  • 11.2阅读笔记
  • 温故知新,英语口语提升计划之Social English - Greeting People
  • 23432
  • 关于dp
  • Git 协作实战与 Gerrit 评审流程
  • 分库分表MyCat 架构迁移 OceanBase | 百丽核心财务系统迁移经验总结与问题汇总
  • 算法研究内容算法有关概念
  • 第13天(中等题 滑动窗口)
  • 我重生了,重生到了CSP前——高中物理电学速通
  • 列车驶向何处 | CSP-S 2025 #3
  • 为啥slmbuild的cutoff不能设得很大
  • 团队项目1-团队展示选题-图书管理系统
  • 第二天,学习部分快捷键位(重点加粗)
  • windows terminal 配置文件
  • 第二章算法作业
  • Linux模板机优化实操
  • 渗透知识靶场实战
  • 第179-180天:横向移动篇入口切换SMB共享WMI管道DCOM组件Impacket套件CS插件