【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 ...
随机推荐
- 【flask】使用Flask-WTF处理表单
我的理解是Flask-WTF与html文件的关系就如同SQLAlchemy与数据库之间的关系. 通过python Form类,生成html代码,并在html模板文件中通过{{}}变量的方式引用这些生 ...
- React 事件对象、键盘事件、表单事件、ref获取dom节点、react实现类似Vue双向数据绑定
1.案例实现代码 import React, { Component } from 'react'; /** * 事件对象.键盘事件.表单事件.ref获取dom节点.react实现类似Vue双向数据绑 ...
- Jmeter(九)集合点
性能测试需要模拟大量用户并发,集合点能够尽量让虚拟用户同一时刻发送请求, 在Jmeter中集合点是通过定时器-同步定时器来完成的.
- Prism 订阅事件 IEventAggregator 说明
本节学习了Event Aggregation事件聚合,这个在Prism中很重要,特别是对于Module间的通信.除了前面介绍的Command可以用于模块间的通信,还有我们这一节介绍的Event Agg ...
- ISO/ISO 参考模型 和 TCP/IP模型
OSI 参考模型 国际化标准组织(International Organization for Standardization,ISO)于1978年提出了一个网络体系结构,成为开放系统互联参考模型(O ...
- MM相关号码范围IMG设定
一.定义各物料类型的号码范围——MMNR 路径:後勤系統 - 一般 > 物料主檔> 基本設定 > 物料類型 >定義各物料類型的號碼範圍 2.定义供应商主档记录号码范围——OMS ...
- C#程序 给IE网页IFRAME控件中所嵌入网页的元素赋值
//引用COM组件//Microsoft HTML Object Library//Microsoft Internet Controls SHDocVw.ShellWindows shellWind ...
- Python日期存入elasticsearch的坑
今天在消费kafka数据到elasticsearch(以下简称es)中的时候遇到一个问题,也是一个坑,折腾了半天,后来发现得来全不费工夫,全是白忙活啊!!! 问题如下: kafka数据中有一个字段是时 ...
- elasticsearch mappings之dynamic的三种状态
目录 前言 动态映射(dynamic:true) 静态映射(dynamic:false) 严格模式(dynamic:strict) 返回主目录 前言 回到顶部 一般的,mapping则又可以分为动态映 ...
- 线性模型-线性回归、Logistic分类
线性模型是机器学习中最简单的,最基础的模型结果,常常被应用于分类.回归等学习任务中. 回归和分类区别: 回归:预测值是一个连续的实数: 分类:预测值是离散的类别数据. 1. 线性模型做回归任务 ...