【CF461B】Appleman and Tree
题目大意:给定一棵 N 个节点的有根树,1 号节点为根节点,每个点有两种颜色(黑、白),现给出树上每个节点的颜色,求有多少种分割树的方式,使得分割出的每个联通块中有且仅有一个黑点。
题解:树形dp
由于每个点都需要属于一个联通块,且一个联通块中不会有超过1个黑色点。又由于树形dp的状态转移是从子节点转移到父节点的,因此状态设计为 dp[u][0/1] 表示以 u 为根的子树中,u 节点属于一个含有 0/1 个黑色节点的联通块的方案数,若该节点属于 0 个黑色节点,则该节点必须要与父节点进行合并,否则不满足题题意。状态转移方程在代码中给出,时间复杂度为 \(O(n)\)。
代码如下
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
typedef long long LL;
vector<int> G[maxn];
int n,cor[maxn];
LL dp[maxn][2];
void dfs(int u){
if(cor[u])dp[u][1]=1;
else dp[u][0]=1;
for(auto v:G[u]){
dfs(v);
dp[u][1]=(dp[u][1]*(dp[v][0]+dp[v][1])%mod+dp[u][0]*dp[v][1]%mod)%mod;
dp[u][0]=dp[u][0]*(dp[v][0]+dp[v][1])%mod;
}
}
void read_and_parse(){
scanf("%d",&n);
for(int i=2,fa;i<=n;i++){
scanf("%d",&fa),++fa;
G[fa].pb(i);
}
for(int i=1;i<=n;i++)scanf("%d",&cor[i]);
}
void solve(){
dfs(1);
printf("%lld\n",dp[1][1]);
}
int main(){
read_and_parse();
solve();
return 0;
}
【CF461B】Appleman and Tree的更多相关文章
- 【CF461E】Appleman and a Game 倍增floyd
[CF461E]Appleman and a Game 题意:你有一个字符串t(由A,B,C,D组成),你还需要构造一个长度为n的字符串s.你的对手需要用t的子串来拼出s,具体来说就是每次找一个t的子 ...
- 【数据结构】B-Tree, B+Tree, B*树介绍 转
[数据结构]B-Tree, B+Tree, B*树介绍 [摘要] 最近在看Mysql的存储引擎中索引的优化,神马是索引,支持啥索引.全是浮云,目前Mysql的MyISAM和InnoDB都支持B-Tre ...
- P3690 【模板】Link Cut Tree (动态树)
P3690 [模板]Link Cut Tree (动态树) 认父不认子的lct 注意:不 要 把 $fa[x]$和$nrt(x)$ 混 在 一 起 ! #include<cstdio> v ...
- LG3690 【模板】Link Cut Tree (动态树)
题意 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和.保证x到y是联通的 ...
- AC日记——【模板】Link Cut Tree 洛谷 P3690
[模板]Link Cut Tree 思路: LCT模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 30 ...
- LG3690 【模板】Link Cut Tree 和 SDOI2008 洞穴勘测
UPD:更新了写法. [模板]Link Cut Tree 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 后接两个整数(x,y),代表询问从x到y ...
- (RE) luogu P3690 【模板】Link Cut Tree
二次联通门 : luogu P3690 [模板]Link Cut Tree 莫名RE第8个点....如果有dalao帮忙查错的话万分感激 #include <cstdio> #includ ...
- LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板
P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...
- 【LeetCode】199. Binary Tree Right Side View 解题报告(Python)
[LeetCode]199. Binary Tree Right Side View 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/probl ...
随机推荐
- flutter stack嵌套,appbar透明,Container设置背景图片并且图片在appbar之下
stack嵌套 一般情况下 stack是无法嵌套,出现stack嵌套,布局就会出乱 解决方式:就是第二个stack需要确定宽高 appbar透明 AppBar( backgroundColor: Co ...
- redis cluster 集群 安装 配置 详解
redis cluster 集群 安装 配置 详解 张映 发表于 2015-05-01 分类目录: nosql 标签:cluster, redis, 安装, 配置, 集群 Redis 集群是一个提供在 ...
- hash模块MD5加密
MD5加密:获取32位加密字符串: 示例(MD5加密'123456')import hashlibhashObject=hashlib.md5(b'123456') #实例化,加密字符串不能直接加密, ...
- Selenium 2自动化测试实战15(多表单切换)
一.多表单切换 在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这 ...
- Nginx搭建动态静态服务器
Nginx做静态资源服务器优于Tomcat 区分静态资源,动态资源请求 使用域名区分! 如果是动态资源请求 反向代理到 Tomcat 如果 是静态资源请求 直接走本地Nginx 配置: ###静态 ...
- 三十七:数据库之SQLAlchemy外建之多对多关系
准备工作 from sqlalchemy import create_engine, Column, Integer, String, Float, Text, ForeignKeyfrom sqla ...
- Horizon Web管理界面
一.horizon 介绍: Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 , 管理员可以使用通过 ...
- ajax的post请求crsftoken提交
- HDU 1753 大明A+B (大正小数加法、字符串处理)
大明A+B Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- CDH5.X文档
属性参数 https://www.cloudera.com/documentation/enterprise/properties.html