[USACO17DEC] Barn Painting - 树形dp
2024-08-28 17:07:16
设\(f[i][j]\)为\(i\)子树,当\(i\)为\(j\)时的方案数
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
const int mod = 1e+9+7;
vector <int> g[N];
int vis[N],n,m,t1,t2,f[N][4],c[N];
void dfs(int p) {
vis[p]=1;
int flag = 0;
f[p][1]=f[p][2]=f[p][3]=1;
for(int i=0;i<g[p].size();i++) {
int q=g[p][i];
if(vis[q]) continue;
flag = 1;
dfs(q);
for(int j=1;j<=3;j++) {
int tmp=0;
for(int k=1;k<=3;k++) {
if(j!=k) tmp+=f[q][k];
}
f[p][j]*=tmp, f[p][j]%=mod;
}
}
if(c[p]) {
for(int i=1;i<=3;i++) {
if(i==c[p]) continue;
f[p][i]=0;
}
}
}
signed main() {
scanf("%lld%lld",&n,&m);
for(int i=1;i<n;i++) {
scanf("%lld%lld",&t1,&t2);
g[t1].push_back(t2);
g[t2].push_back(t1);
}
for(int i=1;i<=m;i++) {
scanf("%lld%lld",&t1,&t2);
c[t1]=t2;
}
dfs(1);
cout<<(f[1][1]+f[1][2]+f[1][3])%mod<<endl;
}
最新文章
- 轻量级ORM框架——第一篇:Dapper快速学习
- 简单而兼容性好的Web自适应高度布局,纯CSS
- win7 64位 VS2010调试提示&ldquo;ORA-12154: TNS: 无法解析指定的连接标识符&rdquo;的解决方法
- centos 7 相关的一些记录
- Android--ColorMatrix改变图片颜色
- SQLite3中自增主键
- CSS3的position:sticky介绍
- spring(7)--注解式控制器的数据验证、类型转换及格式化
- mvc日期控件datepick的几篇文章,日后再总结吧
- 【Python之路】第四篇--Python基础之函数
- Spring Security入门(3-6)Spring Security 的鉴权 - 自定义权限前缀
- 并发编程 futuretask
- es教程
- AngularJS中转换响应内容
- YQCB冲刺第二周第三天
- PMP备考经验分享
- Gradle Goodness: Working with Live Task Collection
- ORB-SLAM(十二)优化
- delphi 窗体的创建和释放
- Spring Cloud Feign 总结