链接:

http://codeforces.com/contest/462/problem/D

题意:

给定n个点的树,

0为根,下面n-1行表示每个点的父节点

最后一行n个数 表示每个点的颜色,0为白色,1为黑色。

把树分成若干个联通块使得每个联通块有且仅有一个黑点,问有多少种分法(结果mod1e9+7)

题解:

树形dp,每个点有2个状态,已经归属于某个黑点和未归属于某个黑点。

代码:

31 int n;
32 int x[MAXN];
33 VI G[MAXN];
34 ll dp[MAXN][2];
35
36 void dfs(int u) {
37     if (x[u]) dp[u][1] = 1;
38     else dp[u][0] = 1;
39     rep(i, 0, G[u].size()) {
40         int v = G[u][i];
41         dfs(v);
42         ll old[2] = { dp[u][0], dp[u][1] };
43         dp[u][0] = (old[0] * dp[v][1] + old[0] * dp[v][0]) % MOD;
44         dp[u][1] = (old[1] * dp[v][1] + old[1] * dp[v][0] + old[0] * dp[v][1]) % MOD;
45     }
46 }
47
48 int main() {
49     ios::sync_with_stdio(false), cin.tie(0);
50     cin >> n;
51     rep(i, 1, n) {
52         int p;
53         cin >> p;
54         G[p].pb(i);
55     }
56     rep(i, 0, n) cin >> x[i];
57     dfs(0);
58     cout << dp[0][1] << endl;
59     return 0;
60 }

转载于:https://www.cnblogs.com/baocong/p/7288245.html

Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp相关推荐

  1. Codeforces Round #263 (Div. 2) D. Appleman and Tree(树形DP)

    题目链接 D. Appleman and Tree time limit per test :2 seconds memory limit per test: 256 megabytes input ...

  2. Codeforces Round #263 (Div.1) B. Appleman and Tree

    题目地址:http://codeforces.com/contest/461/problem/B 题目大意:给一棵树.每一个点为白色或黑色.切断一些边,使得每一个连通块有且仅有一个黑点,问划分方案数. ...

  3. Codeforces Round #595 (Div. 3) F. Maximum Weight Subset 树形dp

    传送门 文章目录 题意: 思路: 题意: n≤200n\le200n≤200 思路: 明显的树形dpdpdp,所以考虑一下dpdpdp状态. 这个题状态挺神的..可能是因为我太菜了,看了半天才看懂. ...

  4. Codeforces Round #786 (Div. 3) G. Remove Directed Edges——树形dp+记忆化

    思路参考 题目链接 思路 题目要求删除一些边,要让最后每个点的入度,出度都小于最开始的情况,或者等于0. 那么出度为1或者入度为1的边一定会被删掉,而且题目说明不存在重边和环,最后的结果一定是一条链. ...

  5. Codeforces Round 263(Div. 2)

    layout: post title: Codeforces Round 263(Div. 2) author: "luowentaoaa" catalog: true tags: ...

  6. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

  7. Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes kmp + dp

    传送门 文章目录 题意: 思路: 题意: 思路: 通过完美子串的定义,我们不难发现满足条件的子串就是kmpkmpkmp中ne[n]ne[n]ne[n]不断向前跳得到的串,现在问题就是如何求这些前缀串在 ...

  8. Codeforces Round #620 (Div. 2) F2. Animal Observation (hard version) dp + 线段树

    传送门 文章目录 题意: 思路: 题意: 比如下面这个图: 思路: 对于这个题,比较容易就能考虑到dpdpdp,设f[i][j]f[i][j]f[i][j]为到了第iii行,覆盖了[j,j+k−1][ ...

  9. Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造

    B. Invariance of Tree Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/576/ ...

最新文章

  1. OpenResty搭建高性能服务端
  2. Django重新整理
  3. hdu3177 贪心
  4. (转)Web Framework 的速度与激情 16 正式上映
  5. 巴什博弈例题:NYOJ23;HDU:2149,1847,2897,2188
  6. HihoCoder - 1591 锦标赛(最大费用最大流)
  7. MVC自动配置原理---SpringBoot
  8. java math 类_Java Math类静态长轮(double d)示例
  9. UVAoj 348 - Optimal Array Multiplication Sequence
  10. 如何选择华为MATE 30 PRO 5G和P40 PRO?
  11. 设计模式之——建造者模式
  12. Es6模板字符串封装与使用
  13. DDPM代码详细解读(1):数据集准备、超参数设置、loss设计、关键参数计算
  14. 佐治亚理工计算机科学录取,佐治亚理工学院计算机科学专业排名第8(2020年USNEWS美国排名)...
  15. dfuse 发布自助 Auth API 账户管理门户,赋予开发者自主管理 key 的平台
  16. 海尔空调、新风系统加装wifi模块
  17. 笔记本不显示计算机储存盘,电脑开机黑屏只有鼠标箭头的解决办法 电脑硬盘无法分区怎么办...
  18. CSS阿里矢量图标(字体图标)
  19. c++第四天(补充引用的定义)
  20. Flash动画学习指南:帧频(Frame rates)

热门文章

  1. 泛型类有什么作用_3 分钟带你彻底搞懂 Java 泛型背后的秘密
  2. 不使用杀毒软件就上网也不会感染计算机病毒,【判断题】不使用杀毒软件就上网也不会感染计算机病毒。 A. 正确 B. 错误...
  3. java swing进度条_Java Swing创建自定义闪屏:在闪屏上添加Swing进度条控件(转)
  4. python程序操作的核心_python核心编程-第五章-个人笔记
  5. LeetCode 1984. 学生分数的最小差值
  6. LeetCode 241. 为运算表达式设计优先级(动态规划)
  7. verilog设计简易正弦波信号发生器_信号发生器工作原理是什么
  8. 计算机设备报废流程图,报废流程图.ppt
  9. c语言结构内部定义指针,C语言知识补漏(一)结构体指针以及位域定义
  10. 安装linux出现基础系统出错,Linux系统出错提示信息详解