CF461B Appleman and Tree题解

news2024/11/23 9:30:09

洛谷题面
在这里插入图片描述
感觉是非常经典的一道题,最近好像总是见到,今天也算给它做了,发一篇题解来记录一下。

这道题是一道树形 DP 题,设 f [ u ] [ 0 / 1 ] f[u][0/1] f[u][0/1] 表示 u u u 点属于一个无黑点 / / / 有且仅有一个黑点的联通块时的方案数。我们考虑如何进行转移。

对于 f [ u ] [ 1 ] f[u][1] f[u][1],我们考虑如果 u u u 在一个有且仅有一个黑点的联通块时,对于它的儿子 v v v,有三种情况:

  1. 儿子是不合法的,那么我们需要把儿子和 u u u 放在一个联通块里,也就是儿子要贴着父亲,对应的贡献是 f [ u ] [ 1 ] × f [ v ] [ 0 ] f[u][1] \times f[v][0] f[u][1]×f[v][0]
  2. 儿子是合法的,那么我们可以从中间断开,对应的贡献是 f [ u ] [ 1 ] × f [ v ] [ 1 ] f[u][1] \times f[v][1] f[u][1]×f[v][1]
  3. 父亲是不合法的,那么需要把 u u u 和它的儿子放到一个联通块里,对应的贡献是 f [ u ] [ 0 ] × f [ v ] [ 1 ] f[u][0] \times f[v][1] f[u][0]×f[v][1]

所以对于 f [ u ] [ 1 ] f[u][1] f[u][1] 的转移就是 f [ u ] [ 1 ] = f [ u ] [ 1 ] × ( f [ v ] [ 0 ] + f [ v ] [ 1 ] ) + f [ u ] [ 0 ] × f [ v ] [ 1 ] f[u][1] = f[u][1] \times (f[v][0] + f[v][1]) + f[u][0] \times f[v][1] f[u][1]=f[u][1]×(f[v][0]+f[v][1])+f[u][0]×f[v][1]

对于 f [ u ] [ 0 ] f[u][0] f[u][0],有两种情况:

  1. 父亲不合法的同时,儿子也不合法,那么把父亲和儿子放在一起,对应的贡献是 f [ u ] [ 0 ] × f [ v ] [ 0 ] f[u][0] \times f[v][0] f[u][0]×f[v][0]
  2. 父亲不合法,但儿子合法,那么就从中间断开,对应的贡献是 f [ u ] [ 0 ] × f [ v ] [ 1 ] f[u][0] \times f[v][1] f[u][0]×f[v][1]

所以对于 f [ u ] [ 0 ] f[u][0] f[u][0] 的转移就是 f [ u ] [ 0 ] = f [ u ] [ 0 ] × ( f [ v ] [ 0 ] + f [ v ] [ 1 ] ) f[u][0] = f[u][0] \times (f[v][0] + f[v][1]) f[u][0]=f[u][0]×(f[v][0]+f[v][1])

初始的状态是 f [ u ] [ c o l o r [ u ] ] = 1 f[u][color[u]] = 1 f[u][color[u]]=1,最后的答案如果以 1 1 1 为根的话就是 f [ 1 ] [ 1 ] f[1][1] f[1][1]

#include <bits/stdc++.h>
#define ll long long
#define drep(a,b,c) for(int a(b) ; a>=(c) ; --a)
#define rep(a,b,c) 	for(int a(b) ; a<=(c) ; ++a)
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x*f;
}
inline void print(int x){
	if(x < 0) putchar('-'),x = -x;
	if(x >= 10) print(x / 10);
	putchar(x % 10 + '0');
}
const int M = 2e5+10;
const int mod = 1e9+7;
int n,cnt;
int head[M],col[M];
ll f[M][2];
struct Edge{
	int to,nxt;
}e[M<<1];
inline void add(int u,int v){
	e[++cnt].to = v;
	e[cnt].nxt = head[u];
	head[u] = cnt;
}
void dfs(int u,int fa){
	f[u][col[u]] = 1;
	for(int i(head[u]) ; i ; i=e[i].nxt){
		int v = e[i].to;
		if(v == fa) continue;
		dfs(v,u);
		f[u][1] = f[u][1] * f[v][1] % mod + f[u][1] * f[v][0] % mod + f[u][0] * f[v][1] % mod;
		f[u][0] = f[u][0] * f[v][0] % mod + f[u][0] * f[v][1] % mod;
		f[u][1] %= mod;
		f[u][0] %= mod;
	}
}
signed main(){
	n = read();
	rep(i,2,n){
		int u = read() + 1;
		add(u,i),add(i,u);
	}
	rep(i,1,n) col[i] = read();
	dfs(1,0);
	printf("%lld\n",f[1][1]);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/23550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【HDR】Deep high dynamic range imaging of dynamic scenes

文章目录一、贡献二、数据集构建三、算法框架3.1 对齐模块3.2 合成模块3.3 损失函数四、实验一、贡献 Paper&#xff1a; Deep high dynamic range imaging of dynamic scenes Code&#xff1a;https://github.com/TH3CHARLie/deep-high-dynamic-range 首次提出使用机器学习方…

Pdfjs使用

pdfjs使用一、下载二、Springboot引入pdfjs三、利用PDFJS预览pdf文件并加水印四、后端将pdf添加水印参看链接一、下载 pdfjs官方地址 二、Springboot引入pdfjs 针对于pdfjs方面有用的只是pdf这个包下面和viewer.html这个html页面viewer.html是我们用来展示pdf的页面不需要改但…

高压功率放大器在超声悬浮中的应用研究

高压功率放大器的叫法对于不同的人来说是完全不同的&#xff0c;有人叫功率放大器&#xff0c;也有人叫电压放大器&#xff0c;但它们都是指同一个电子测量仪器设备&#xff0c;主要是指内部能够拥有电压和功率放大电路&#xff0c;可以把微弱的外部信号进行放大输出的放大器。…

在华为云 OSC 上快速部署 EMQX MQTT 集群

EMQX Kubernetes Operator 是 EMQ 发布的一个封装、部署和管理工具&#xff0c;也是一个特定的应用控制器&#xff0c;方便 DevOps 人员在 Kubernetes 上编排 EMQX MQTT 消息服务集群&#xff0c;管理其生命周期。 华为云原生基础设施&#xff08;云容器引擎 CCE、容器镜像服务…

索引数据结构千千万 , 为什么B+Tree独领风骚

索引的由来 大数据时代谁掌握了数据就是掌握了流量&#xff0c;就是掌握的号召力。面对浩瀚的数据如何存储并非难事&#xff0c; 难点在于如何在大数据面前查询依旧快如闪电&#xff01; 这时候索引就产生了&#xff0c;索引的产生主要还是借鉴于图书管理员书签的功能。在大数…

谷歌、微软、Meta?谁才是 Python 最大的金主?

你知道维护 Python 这个大规模的开源项目&#xff0c;每年需要多少资金吗&#xff1f; 答案是&#xff1a;约 200 万美元&#xff01; PSF&#xff08;Python 软件基金会&#xff09;在 2022 年 6 月发布了 2021 的年度报告&#xff0c;其中披露了以下这份支出明细&#xff08;…

大家介绍一篇学生选课系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

若依框架字典配置以及使用(结合vue和emelent)

一&#xff1a;字典数据创建&#xff08;我们公司是后端做的&#xff0c;前端不用管&#xff09; 1.首先新建要指定的默认角色 &#xff08;1&#xff09;必须用管理员账号登录才能看到角色管理 &#xff08;2&#xff09;具体怎写&#xff0c;可以参考已有的数据&#xff08…

低代码平台中的“模型驱动”与“表单驱动”有何区别?

低代码定义&#xff1a; 低代码是近几年比较火的一种应用程序快速开发方式&#xff0c;它能帮助用户在开发软件的过程中大幅减少手工编码量&#xff0c;并通过可视化组件加速应用程序的高效交付。&#xff08;低代码的定义来自Forrester报告&#xff0c;被认为是低代码一词的起…

坐标的变换

在QPainter可以使用以下函数变换坐标&#xff1a; QPainter&#xff1a;&#xff1a;scale()缩放坐标系统QPainter&#xff1a;&#xff1a;rotate()顺时针旋转QPainter&#xff1a;&#xff1a;translate()平移QPainter&#xff1a;&#xff1a;shear()围绕原点来扭曲坐标系统…

[附源码]java毕业设计小超市进销存管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

fmllr--学习笔记

预备知识&#xff1a; 说话人自适应技术是利用特定说话人数据对说话人无关(Speaker Independent,SI)的码本进行改造&#xff0c;其目的是得到说话人自适应(SPeaker Adapted, SA)的码本来提升识别性能。在某个说话人的训练数据足够多的时候&#xff0c;针对当前说话人数据采用传…

m基于3GPP-LTE通信网络的认知家庭网络Cognitive-femtocell性能matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 本系统所涉及到的几个主要模块&#xff0c;具体有如下几个模块&#xff1a; A. Simulation Flow&#xff1a;仿真流程 B. Initialization&#xff1a;初始化 C. Mobility Model&…

【每日两题】day 01 组队竞赛 删除公共字符

链接&#xff1a;组队竞赛__牛客网 (nowcoder.com) 解题思路 该题目就是求所有队员水平的数组中的尽可能大的水平之和 因为每个队伍都是三个人&#xff0c;平均水平值肯定是排序后水平中间的值 import java.util.*;public class Main {public static void main(String[] ar…

VisualDrag低代码拖拽模板

目录背景技术&文档二开优化方案1. 优化侧边栏2. 优化图片插入3. 新增可插入画布的组件4. 解决组件鼠标默认事件冲突的问题数据保存对接&页面生成预览保存对接生成预览源码下载背景 接到一个需求做一个拖拽模板低代码生成界面&#xff08;如上图&#xff09;&#xff0c…

项目交付过程中,进度失控的原因有哪些?

在项目交付过程中&#xff0c;会出现项目交付的进度与计划有较大的偏差&#xff0c;导致这种偏差的原因往往是多种多样的&#xff0c;一般常见的引起进度延期的原因有哪些&#xff1f; 1、计划不清晰 项目开始前必须有个计划&#xff0c;工作思路必须事前理清。 项目经理最…

springboot+ssm大学生家教课程订购平台的设计与实现

制作一个大学生家教平台的设计与实现是非常必要的。本网站是借鉴其他人的开发基础上&#xff0c;用MySQL数据库和JSP定制了大学生家教平台的设计与实现。系统前台实现了用户注册、登录、学习课程、家教准则、通知公告、双减政策等功能&#xff0c;并且还可以修改密码、个人信息…

windows10复制文件需要管理员权限,复制需要管理员权限怎么办

在Windows10操作系统的电脑中&#xff0c;很多用户都遇到这样的问题&#xff1a;windows10复制文件需要管理员权限&#xff0c;很多用户都不知道该怎么解决这个问题。在本文中&#xff0c;我们写出了详细的解决方法&#xff0c;让你可以轻松复制文件&#xff0c;并且也修复了需…

SpringBoot中任务是什么/Quartz和SpringTask在Spring Boot中怎么使用/SpringBoot怎么给用户发邮件

写在前面&#xff1a; 继续记录自己的SpringBoot学习之旅&#xff0c;这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客&#xff0c;详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用&#xff01; 3.5.2 任务 3.5.2.1 简述 定时任务是企业应用中常…

多种BCN点击试剂:1426827-79-3,endo BCN-PEG4-COOH,1841134-72-2

双环[6,1,0]壬炔 (BCN) &#xff08;环丙烷环辛炔&#xff09;可以通过无铜的点击化学与叠氮化物标记的分子或生物分子反应生成稳定的三氮唑连接。同样其可以和多种不同的基团进行连接&#xff0c;包括acid&#xff0c;NHS ester&#xff0c;amine等。西安凯新生物科技有限公司…