题目地址:http://codeforces.com/contest/461/problem/B

题目大意:给一棵树。每一个点为白色或黑色。切断一些边,使得每一个连通块有且仅有一个黑点,问划分方案数。

算法讨论:TreeDP。

f[x][0..1]表示x所在连通块有0/1个黑点。设y为x的儿子,则DP方程为f[x][1]=f[x][1]*f[y][0]+f[x][1]*f[y][1]+f[x][0]*f[y][1],f[x][0]=f[x][0]*f[y][0]+f[x][0]*f[y][1]。

Code:

#include <cstdio>#define N 100000
#define mod 1000000007using namespace std;long long f[N+10][2];
int n,x,mm,next[N+10],son[N+10],ed[N+10],c[N+10];inline void add(int x,int y){next[++mm]=son[x],son[x]=mm,ed[mm]=y;
}void dfs(int x){f[x][c[x]]=1;for (int i=son[x];i;i=next[i]){int y=ed[i];dfs(y);f[x][1]=(f[x][1]*f[y][0]%mod+f[x][1]*f[y][1]%mod+f[x][0]*f[y][1]%mod)%mod;f[x][0]=(f[x][0]*f[y][0]%mod+f[x][0]*f[y][1]%mod)%mod;}
}int main(){scanf("%d",&n);for (int i=2;i<=n;++i) scanf("%d",&x),add(++x,i);for (int i=1;i<=n;++i) scanf("%d",&c[i]);dfs(1);printf("%I64d\n",f[1][1]);return 0;
}

By Charlie Pan

Aug 27,2014

转载于:https://www.cnblogs.com/jzdwajue/p/6819428.html

Codeforces Round #263 (Div.1) B. Appleman and Tree相关推荐

  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. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

  3. Codeforces Round 263(Div. 2)

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

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

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

  5. 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/ ...

  6. Codeforces Round #263 (Div. 1)-A,B,C

    A: 这道题目还是很简单的,做过很多遍了,类似于切割木板的问题. 把所有的数放在一个优先队列里,弹出两个最大的,然后合并,把结果放进去.依次进行. #include <iostream> ...

  7. Codeforces Round #379 (Div. 2) E. Anton and Tree —— 缩点 + 树上最长路

    题目链接:http://codeforces.com/contest/734/problem/E E. Anton and Tree time limit per test 3 seconds mem ...

  8. Codeforces Round #530 (Div. 1) C. Construct a tree 想法

    题目链接:http://codeforces.com/contest/1098/problem/C 题意: 给你n个点要你组成一棵以结点1为根的树,使得所有结点的子树的大小和为s,且在这种情况下使得分 ...

  9. Codeforces Round #379 (Div. 2) E. Anton and Tree

    题意: 给一颗树 每个节点有黑白2色 可以使一个色块同事变色,问最少的变色次数. 思路: 先缩点 把一样颜色的相邻点 缩成一个 然后新的树 刚好每一层是一个颜色. 最后的答案就是树的直径/2 不过我用 ...

最新文章

  1. 网络扫描信息收集基于(Windows)
  2. 颜色空间模型(HSV\LAB\RGB\CMYK)
  3. 用边缘计算为智能制造提速,行业的破局者是他们
  4. 如何做好网络推广浅析新手对网站SEO内链该如何优化?
  5. linux介绍及目录结构(一)
  6. 使用内核定时器的second字符设备驱动及测试代码
  7. server输出几行 sql_如何将SQL Server存储过程的输出存储在.txt文件中
  8. UP装机部署步骤大纲
  9. footer代码html,css如何实现footer定位(完整代码)
  10. 【报告分享】快消产业互联网案例研究报告.pdf(附下载链接)
  11. UVA 10596 Morning Walk
  12. 福建农林大学外事处界面设计
  13. 《图论及其应用》期末复习汇总
  14. 数学建模——相关系数、皮尔逊相关系数、斯皮尔曼相关系数
  15. 什么是电脑pe系统?
  16. 照相机的成像原理,镜头和单反相机的认识
  17. JavaSrcipt学习(学习打卡Day9)
  18. PHP获取钉钉审批,PHP获取钉钉考勤信息源代码
  19. 组合计数——车的放置(逆元)+数三角形+序列统计(lucas定理)
  20. 支付宝自动续费申请PHP,支付宝自动续费怎么取消?

热门文章

  1. system.exception所有子类详解
  2. adprw指令通讯案例_超实用,非常典型的Modbus通讯项目案例,三分钟学会
  3. matlab 符号 推倒,【MATLAB】符号数学计算(四):符号表达式操作
  4. dataGridView1.DataSource多增加列,数据不进自己规定的列?
  5. coreldraw凹槽_CorelDRAW教程 打造逼真静物写生油画
  6. python2没有pip命令_解决Windows下python和pip命令无法使用的问题
  7. linux比windows更快吗,linux比windows快很多倍除了算法的优势 有没C比C++快的原因?
  8. linux中hadoop环境变量配置文件,Ubuntu中关于hadoop环境变量的设置方法
  9. PHP生成海报 文字描边,php实现图片添加描边字和马赛克的方法
  10. do sb suggest to_suggest sb to do还是doing