【题解】2023-11-11 B层模拟赛T1

news2024/11/20 15:40:11

宣传一下 算法提高课整理

CSDN个人主页:更好的阅读体验

Start

原题链接
CF461B
题目描述

一棵树有 n n n 个节点, n − 1 n − 1 n1 条边。树上的节点有两种:黑,白节点。

Tyk 想断掉一些边把树分成很多部分。

他想要保证每个部分里面有且仅有一个黑节点。

请问他一共有多少种的方案?

输入

第一行一个数字 n n n,表示树的节点个数。

第二行一共 n − 1 n − 1 n1 个数字 p 0 , p 1 , p 2 , p 3 , . . . , p n − 2 p_0, p_1, p_2, p_3, ..., p_{n−2} p0,p1,p2,p3,...,pn2 p i p_i pi 表示第 i + 1 i + 1 i+1 个节点和 p i p_i pi 节点之间有一条边。注意,点的编号是 0 0 0 n − 1 n − 1 n1

第三行一共 n n n 个数字 x 0 , x 1 , x 2 , x 3 , . . . , x n − 1 x_0, x_1, x_2, x_3, ..., x_{n−1} x0,x1,x2,x3,...,xn1。如果 x i x_i xi 1 1 1,表示 i i i 号节点是黑的

如果 x i x_i xi 0 0 0,表示 i i i 号节点是白的。

输出

输出一个数字,表示总方案数。答案对 1 0 9 + 7 10^9 + 7 109+7 取模。

样例输入
3
0 0
0 1 1
样例输出
2

思路

一眼丁真,鉴定为 树形DP

  • 状态表示 f u , 0 / 1 f_{u,0/1} fu,0/1:
    • 集合: 在编号为 u u u 的节点所在连通块中,没有黑点(0) | 只有 u u u 一个黑点(1)
    • 属性: 方案数 Count \text{Count} Count
  • 状态计算:
    • 对于 f u , 1 f_{u,1} fu,1,讨论它子节点 j j j 进行划分:
      • j j j 不是黑色点,此时点 j j j 可以被划分到点 u u u 所在连通块: f u , 1 × f j , 0 f_{u,1}\times f_{j,0} fu,1×fj,0;
      • j j j 是黑色点:
        1. u u u 是黑色点,此时点 u u u 和点 j j j 分属两个不同连通块。 f u , 1 × f j , 1 f_{u,1}\times f_{j,1} fu,1×fj,1;
        2. u u u 不是黑色点,此时点 u u u 可以被划分到点 j j j 所在连通块。 f u , 0 × f j , 1 f_{u,0}\times f_{j,1} fu,0×fj,1;
    • 对于 f u , 0 f_{u,0} fu,0 同理进行划分,不过注意此时点 u u u 一定不是黑色点,不然不符合状态表示:
      • j j j 不是黑色点,此时任意划分: f u , 0 × f j , 0 f_{u,0}\times f_{j,0} fu,0×fj,0;
      • j j j 是黑色点,此时点 u u u 划分到点 j j j 所在连通块。 f u , 0 × f j , 1 f_{u,0}\times f_{j,1} fu,0×fj,1;
    • 初始化点 u u u :
      • 当点 u u u 是黑色点时: f u , 1 ← 1 f_{u,1}\leftarrow 1 fu,11;
      • 当点 u u u 不是黑色点时: f u , 0 ← 1 f_{u,0}\leftarrow 1 fu,01.

贴出核心代码:

void dfs(int u, int fa)
{
    for (int i = h[u]; ~i; i = ne[i])
    {
        int j = e[i];
        if (j == fa) continue;
        dfs(j, u);

        f[u][1] = ((f[u][1] * f[j][0] % mod + f[u][1] * f[j][1] % mod) % mod + f[u][0] * f[j][1] % mod) % mod;
        f[u][0] = (f[u][0] * f[j][0] % mod + f[u][0] * f[j][1] % mod) % mod;
    }
}

228aa7bed3e021faf24cf8560d3e47bb.gif

最后,如果觉得对您有帮助的话,点个赞再走吧!

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

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

相关文章

【优选算法系列】【专题二滑动窗口】第二节.1004. 最大连续1的个数 III和1658. 将 x 减到 0 的最小操作数

文章目录 前言一、最大连续1的个数 III 1.1 题目描述 1.2 题目解析 1.2.1 算法原理 1.2.2 代码编写二、将 x 减到 0 的最小操作数 2.1 题目描述 2.2 题目解析 2.2.1 算法原理 2.2.2 代码编写总结 前言 一、最大连…

迈巴赫S480升级流星雨大灯 最高配的数字大灯

“流星雨”数字大灯,极具辨识度,通过260万像素的数字微镜技术,实现“流星雨”仪式感与高度精确的光束分布;在远光灯模式下,光束精准度更达之前84颗LED照明的100倍,更新增坡道照明功能,可根据导航…

进程线程

从Android3.0开始,系统要求网络访问必须在子线程中进行,否则会抛出异常,这么做是为了避免主线程被阻塞而导致ANR,那么网络访问的操作就必须要放到线程中去执行。 进程 进程是操作系统结构的基础,是程序在一个数据集合…

极兔面试:微服务爆炸,如何解决?Uber 是怎么解决2200个微服务爆炸的?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的DDD落地经验? 谈谈你对DDD的理解&#x…

基于HF transformers的AI建模和训练实战

我们经常使用 scikit-learn 对监督学习和无监督学习任务的数据进行建模。 我们熟悉面向对象的设计,例如启动类并从类中调用子函数。 然而,当我个人使用 PyTorch 时,我发现与 scikit-learn 类似但又不一样的设计模式。 在线工具推荐&#xff…

11个最受欢迎的3D打印AI软件【2023】

如今,人工智能(AI)似乎已经成为每个人都在谈论的话题。 尽管围绕该技术的伦理问题存在着重要的讨论,但不可否认的是,人工智能可能成为包括 3D 打印在内的许多不同行业的重要工具。 事实上,人工智能在 3D 打…

【Java王大师王天师】关注有礼博客模板

【点我-这里送书】 本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的…

单片机启动流程

存储器 ​ 一个单片机中存在rom和ram,Soc也有rom和ram(ddrx),部分Soc还包含MMU(Memory Manage Unit 内存管理单元)— (用于系统内存管理,比如说虚拟内存空间,内存区间的…

YOLOV5改进:RefConv | 即插即用重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点 3.涨点效果:RefConv,实现有效涨点! 论文地址 …

响应式婴幼儿早教启蒙网站模板源码

模板信息: 模板编号:6830 模板编码:UTF8 模板颜色:红色 模板分类:学校、教育、培训、科研 适合行业:培训机构类企业 模板介绍: 本模板自带eyoucms内核,无需再下载eyou系统&#xf…

AI批量剪辑矩阵托管系统----源码技术开发

AI批量剪辑矩阵托管系统----源码技术开发 抖音账号矩阵系统是基于抖音开放平台研发的用于管理和运营多个抖音账号的平台。它可以帮助用户管理账号、发布内容、营销推广、分析数据等多项任务,从而提高账号的曝光度和影响力。 具体来说,抖音账号矩阵系统可…

如何通过命令查看某一文件的内容改动和提交记录

1. 查看最近10条的提交记录 一行显示 git log --oneline -102.查看某一个文件的提交记录 git log --oneline -10 文件路径3.查看某个文件的修改内容 查看某次提交的修改 内容 git show bcd9299 查看某次提交某个文件的修改内容git show bcd9299 文件路径4.对比两次提交内容的…

2011年09月21日 Go生态洞察:Go图像处理包

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

3.0 熟悉IDAPro静态反汇编器

IDA Pro 是一种功能强大且灵活的反汇编工具,可以在许多领域中发挥作用,例如漏洞研究、逆向工程、安全审计和软件开发等,被许多安全专家和软件开发者用于逆向工程和分析二进制代码。它支持大量的二进制文件格式和CPU架构,并提供了强…

C++入门篇3(类和对象【重点】)

文章目录 C入门篇3(类和对象【重点】)1、面向过程和面向对象2、类的引入3、类的定义4、类的访问限定符及封装4.1、访问限定符4.2、封装 5、类的作用域6、类的实例化(对象)7、类对象模型7.1、类对象的存储方式7.2、结构体&#xff…

评国青、优青、杰青,到底需要什么级别的文章?五篇代表作如何选?

一到年底就听同事们讨论到底申报“杰青”、“优青”还是“国青”,那么,“杰青”到底是什么呢?它和“优青”、“国青”又有什么区别呢? 杰青,全称“国家杰出青年基金获得者”,是国家自然科学基金里人才资助…

便利与健康共赢:社区便民奶柜行业的广阔前景

随着生活节奏的加快,人们对便利性的需求不断增加,社区便民奶柜将迎来广阔的市场前景。首先,现代人的生活节奏快速增长,对便利性的需求也日益迫切,这为社区便民奶柜提供了广阔的市场空间。其次,随着健康意识…

PyGWalker :数据分析中最优秀工具库!

假设你在 Jupyter Notebook 中有一堆数据需要分析和可视化。PyGWalker 就像一个神奇的工具,使这一切变得非常容易。它接受你的数据并将其转换成一种特殊的表格,你可以像使用 Tableau 一样与之交互。 你可以通过视觉方式探索数据,进行互动&am…

Linux离线安装cuda以及配置其环境

cuda安装 cuda版本适配 查看自己电脑所支持的cuda版本号 【若安装超算平台上的cuda toolkit这一步骤可以跳过】 CUDA toolkit Download官网下载cuda toolkit 下载好的.run可执行文件上传到平台进行离线安装 $ cd /上传的目录 $ chmod x cuda_12.2.2_535.104.05_linux.run /…

如何更好的使用Copilot

Copilot从诞生到现在过去了挺长时间了,大家对Copilot的评价算是褒贬不一吧。有些人觉得Copilot高效且神奇,可以对自己的工作大大提效;有些觉得也就那样,为什么要花那么多钱做这个事情,钱它不香吗? 从最开始…