codeforces 461B 树DP
来源:互联网 发布:音频美化软件 编辑:程序博客网 时间:2024/05/29 19:15
题意:给出一棵树,每个节点的颜色为黑色或者白色,现在可以切割任意条边,使得答案这个树被分成若干块,每块至多一个黑色点。问方案数有多少。
对于树dp,一般用
对于这题我们还需要记录,当前子树中是否已经有黑色点了,如果有,就可以切割,没有,就不能切割。这样状态的构造和转移都已经出来了。
需要注意
#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL mod = 1e9+7;const LL maxn = 110000;namespace treedp { LL n; vector<LL> G[maxn]; LL dp[maxn][2]; void dfs(LL u, LL fa) { for(LL i = 0; i < G[u].size(); i++) { LL v = G[u][i]; if(v == fa) continue; dfs(v, u); dp[u][1] = (dp[u][1] * (dp[v][0] + dp[v][1]) % mod + dp[u][0] * dp[v][1]) % mod; dp[u][0] = (dp[u][0] * (dp[v][0] + dp[v][1])) % mod; } } void solve() { scanf("%d", &n); for(LL i = 1; i < n; i++) { LL p; scanf("%lld", &p); G[p].push_back(i); G[i].push_back(p); } for(LL i = 0; i < n; i++) { LL v; scanf("%lld", &v); dp[i][v] = 1; } dfs(0, -1); printf("%d\n", dp[0][1]); }}int main() { treedp::solve(); return 0;}
阅读全文
0 0
- codeforces 461B 树DP
- Codeforces 461B 树DP 解题报告
- codeforces 533-B Work Group-树DP-
- 【dp】 Codeforces 2B
- Codeforces 2B (DP)
- CodeForces 407B DP
- Codeforces - 577B dp
- codeforces 587B(dp)
- codeforces 414B (DP)
- Codeforces 679B - dp
- Codeforces 577B(dp)
- codeforces 855B DP
- 字符串dp codeforces B
- codeforces 461B B. Appleman and Tree(树形dp)
- codeforces 573B B. Bear and Blocks(线段树+dp)
- codeforces 240B - Fence DP
- Codeforces 258B 数位DP
- codeforces 414b(数位DP)
- web项目启动后的加载顺序
- Effective STL 39 Make predicates pure functions
- java触发器学习
- ArrayList指单链表分析
- 有关于数据库查询语法中,对时间有要求的方法
- codeforces 461B 树DP
- Eclipse 创建Maven 接口
- Date函数实例
- iOS11 安全区域适配
- JS中innerHTML与value、val的用法区别
- iOS 11,关于隐藏导航栏左侧返回按钮的标题title
- POJ
- 根据面试经验,浅谈hashmap底层实现
- ubuntu 下出现E: Sub-process /usr/bin/dpkg returned an error code