当前位置: 首页 > article >正文

蓝桥杯2024国B数星星

小明正在一棵树上数星星,这棵树有 n 个结点 1,2,⋯,n。他定义树上的一个子图 G 是一颗星星,当且仅当 G 同时满足:

  1. G 是一棵树。
  2. G 中存在某个结点,其度数为 ∣VG​∣−1。其中 ∣VG​∣ 表示这个子图含有的结点数。

两颗星星不相同当且仅当它们包含的结点集合 VG​ 不完全相同。小明想知道这棵树上有多少颗不同的星星包含的结点的数量在区间 [L,R] 中,答案对 1000000007 取模。

输入格式

输入共 n+1 行。

第一行为一个正整数 n。

后面 n−1 行,每行两个正整数表示树上的一条边。

第 n+1 行,两个正整数 L,R。

输出格式

输出共 1 行,一个整数表示答案。

输入输出样例

输入 #1复制

6
1 2
1 3
2 4
2 5
3 6
3 4

输出 #1复制

6

说明/提示

【样例说明】

包含 3 个结点的星星有 5 个,它们的结点集合分别为 {1,2,3},{1,2,4},{1,2,5},{2,4,5},{1,3,6}。

包含 4 个结点的星星有 1 个,它的结点集合为 {1,2,4,5}。

思路:

首先要是一个子图 G 是一棵树,且存在一个节点的度数为 ∣VG​∣−1,也就是子图节点数量减一,显然的,这棵树的层数必须为 2,从另一个方面说,也就是一棵由一个节点,我们可以把它看成根,它连接了剩余 ∣VG​∣−1 个节点,且剩余节点之间没有连边,那么我们明白了要想产生一颗星星他所需要的条件:

  • 节点数量在范围之内。

  • 我们设子图节点数量为 x,那么它的连边数量为 x−1,这也就是树的基本特性。

  • 子图看作一棵树只有两层。

  • 存在一个节点使得它连向了剩余的所有节点,且剩余节点之间没有连边。

知道了这些就好做了,我们去遍历一棵树,每遍历到一个节点,我们就去算以他为根形成满足条件的子图数量即可,那么怎样计算满足条件的子图数量呢?现在我们设当前子图节点数量为 x,首先我们从他给定的范围开始,方案也就是从 x−1 个节点中选 l 个,从 x−1 个节点中选 l+1 个,从 x−1 个节点中选 l+2 个,一直到从 x−1 个节点中选 r 个,将选择的不同数量的相应方案数相加即可,但为什么 x 要减去 1 呢?因为要去掉根,因为根是目前连接剩余 x−1 个节点的,不能算入进去。这一步,我们可以用组合数计算出,提前与处理好阶乘和逆元,可以更快更方便的计算出以节点 i 为根产生的贡献。

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mod = 1e9 + 7;
int n, in[100005], inv[100005], fec[100005], f[100005], l, r, res;
vector < int > g[100005];
int C (int x, int y)
{return inv[x] * f[y] % mod * f[x - y] % mod;
}
void dfs (int x, int fa)
{for (auto y : g[x]){if (y ^ fa)dfs(y, x);}if (static_cast<int>(g[x].size()) + 1 >= l){int p = min(r - 1ll, static_cast<int>(g[x].size()));for (int i = l - 1;i <= p; ++ i){res = (res + C(g[x].size(), i) % mod + mod) % mod;}}}
signed main()
{cin >> n;inv[0] = fec[0] = inv[1] = fec[1] = f[0] = f[1] = 1;for (register int i = 2;i <= n; ++ i){inv[i] = inv[i - 1] * i % mod;fec[i] = fec[mod % i] * (mod - mod / i) % mod;f[i] = f[i - 1] * fec[i] % mod;}for (register int i = 1;i < n; ++ i){int x, y;cin >> x >> y;g[x].push_back(y);g[y].push_back(x);}cin >> l >> r;dfs(1, 0);cout << res << "\n";return 0;
}

AC截图:

相关文章:

蓝桥杯2024国B数星星

小明正在一棵树上数星星&#xff0c;这棵树有 n 个结点 1,2,⋯,n。他定义树上的一个子图 G 是一颗星星&#xff0c;当且仅当 G 同时满足&#xff1a; G 是一棵树。G 中存在某个结点&#xff0c;其度数为 ∣VG​∣−1。其中 ∣VG​∣ 表示这个子图含有的结点数。 两颗星星不相…...

Ubuntu 系统上通过终端安装 Google Chrome 浏览器

使用终端安装前&#xff0c;需要配置好终端使用了代理。 参考文章&#xff1a;https://blog.csdn.net/yangshuo1281/article/details/147262633?spm1011.2415.3001.5331 转自 风车 首先&#xff0c;添加 Google Chrome 的软件源和密钥&#xff1a; # 下载并添加 Google 的签…...

中科院1区顶刊Expert Systems with Applications ESO:增强型蛇形算法,性能不错

Snake Optimizer&#xff08;SO&#xff09;是一种优化效果良好的新颖算法&#xff0c;但由于自然规律的限制&#xff0c;在探索和开发阶段参数更多是固定值&#xff0c;因此SO算法很快陷入局部优化并慢慢收敛。本文通过引入新颖的基于对立的学习策略和新的动态更新机制&#x…...

zk(Zookeeper)实现分布式锁

Zookeeper实现分布式锁 1&#xff0c;zk中锁的种类&#xff1a; 读锁&#xff1a;大家都可以读&#xff0c;要想上读锁的前提&#xff1a;之前的锁没有写锁 写锁&#xff1a;只有得到写锁的才能写。要想上写锁的前提是&#xff1a;之前没有任何锁 2&#xff0c;zk如何上读锁 创…...

自我生成,自我训练:大模型用合成数据实现“自我学习”机制实战解析

目录 自我生成&#xff0c;自我训练&#xff1a;大模型用合成数据实现“自我学习”机制实战解析 一、什么是自我学习机制&#xff1f; 二、实现机制&#xff1a;如何用合成数据实现自我训练&#xff1f; ✅ 方式一&#xff1a;Prompt强化生成 → 自我采样再训练 ✅ 方式二…...

【Vue】从 MVC 到 MVVM:前端架构演变与 Vue 的实践之路

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–架构模式的演变背景​三–MVC&#xff1a;经典的分层起点​四–MVP&#xff1a;面向接口的解耦尝试​五–MVVM&#xff1a;数据驱动的终极形态​​六–Vue&#xff1a;MVVM 的现代化实践​​​ 二. 架构模…...

prototype`和`__proto__`有什么区别?如何手动修改一个对象的原型?

在 JavaScript 中&#xff0c;prototype 和 __proto__ 都与原型链相关&#xff0c;但它们的角色和用途有本质区别&#xff1a; 1. prototype 和 __proto__ 的区别 特性prototype__proto__归属对象仅函数对象拥有&#xff08;如构造函数&#xff09;所有对象默认拥有&#xff0…...

Flask+Influxdb+grafna构建电脑性能实时监控系统

Influx下载地址&#xff0c;这里下载了以下版本influxdb-1.8.5_windows_amd64.zip 运行前需要先启动Influx数据库&#xff1a; 管理员方式运行cmd->F:->cd F:\influxdb\influxdb-1.8.5-1->influxd -config influxdb.conf&#xff0c;以influxdb.conf配置文件启动数…...

关于链接库

在 C# 中&#xff0c;链接库主要分为两种类型&#xff1a;托管链接库和非托管链接库&#xff0c;以下为你详细介绍它们的特点和导入方式&#xff1a; 托管链接库 特点 托管链接库通常是用 .NET 兼容的语言&#xff08;如 C#、VB.NET 等&#xff09;编写的&#xff0c;运行在…...

若伊微服务版本教程(自参)

第一步 若伊官网下载源码 https://ruoyi.vip/ RuoYi-Cloud: &#x1f389; 基于Spring Boot、Spring Cloud & Alibaba的分布式微服务架构权限管理系统&#xff0c;同时提供了 Vue3 的版本 git clone 到 本地 目录如下&#xff1a; 第二部 参考官网 运行部署说明 环境部署…...

数据库性能优化(sql优化)_分布式优化思路01_yxy

数据库性能优化_分布式优化思路01 1 分布式数据库的独特挑战2 分布式新增操作符介绍2.1 数据交换操作符(ESEND/ERECV):2.2 数据迭代操作符GI:3 核心优化策略(一)_分区裁剪优化3.1 普通分区裁剪3.2 动态分区裁剪1 分布式数据库的独特挑战 在分布式数据库系统中,核心为数据被…...

ESP32与STM32哪种更适合初学者?

目录 1、ESP32&#xff1a;物联网时代的“网红” 2、STM32&#xff1a;工业界的“常青树” 3、到底谁更容易&#xff1f; 无论是刚入坑的小白&#xff0c;还是想扩展技术栈的老鸟&#xff0c;在选择主力 MCU 时&#xff0c;学习曲线绝对是重要的考量因素。ESP32 以其强大的 …...

秒杀秒抢系统开发:飞算 JavaAI 工具如何应对高并发难题?

秒杀、秒抢活动已成为电商促销与吸引流量的常用手段。然而&#xff0c;此类活动所带来的高并发访问&#xff0c;对系统性能构成了巨大挑战。如何确保系统在高并发场景下依然能够稳定、高效运行&#xff0c;成为开发者亟待解决的关键问题。飞算 JavaAI 工具作为一款功能强大的开…...

未启用CUDA支持的PyTorch环境** 中使用GPU加速解决方案

1. 错误原因分析 根本问题&#xff1a;当前安装的PyTorch是CPU版本&#xff0c;无法调用GPU硬件加速。当运行以下代码时会报错&#xff1a;model YOLO("yolov8n.pt").to("cuda") # 或 .cuda()2. 解决方案步骤 步骤1&#xff1a;验证CUDA可用性 在Pyth…...

C# 将Excel格式文件导入到界面中,用datagridview显示

界面按钮不做介绍。 主要代码: //用于获取从上一个页面传过来datagridview标题 public DataTable GetHeader { get; set; } private void UI_EXPINFO_Load(object sender, EventArgs e) { //页面加载显示listbox1中可…...

Spring Boot整合难点?AI一键生成全流程解决方案

在当今的软件开发领域&#xff0c;Spring Boot 凭借其简化开发流程、快速搭建项目的优势&#xff0c;成为了众多开发者的首选框架。然而&#xff0c;Spring Boot 的整合过程并非一帆风顺&#xff0c;常常会遇到各种难点。而飞算 JavaAI 的出现&#xff0c;为解决这些问题提供了…...

分享一下这几天在公司学到的东西

这几天我学到了很多东西 &#xff08;1&#xff09;我自己原来写项目&#xff0c;前后端联调用的都是postman&#xff0c;然后直接测试接口&#xff0c;然后连一下就完了。这几天我接触到了apifox的Mock这个东西&#xff01;我知道了一个前端工程师进行前后端链条的时候&#…...

Java转Go日记(一):Slice解密

1.切片通过函数&#xff0c;传的是什么&#xff1f; package mainimport ("fmt""reflect""unsafe" )func main() {s : make([]int, 5, 10)PrintSliceStruct(&s)test(s) }func test(s []int) {PrintSliceStruct(&s) }func PrintSliceStr…...

MySQL 锁机制全景图:分类、粒度与示例一图掌握

✅ 一、按粒度分类&#xff08;锁的范围大小&#xff09; 1. 表级锁&#xff08;Table Lock&#xff09; 锁住整张表粒度大&#xff0c;开销小&#xff0c;并发性差常见于&#xff1a;MyISAM 引擎 &#x1f4cc; 示例&#xff1a; LOCK TABLES user WRITE; -- 会锁住整个 u…...

STM32江科大----------PID算法

声明&#xff1a;本人跟随b站江科大学习&#xff0c;本文章是观看完视频后的一些个人总结和经验分享&#xff0c;也同时为了方便日后的复习&#xff0c;如果有错误请各位大佬指出&#xff0c;如果对你有帮助可以点个赞小小鼓励一下&#xff0c;本文章建议配合原视频使用❤️ 如…...

架构师面试(二十九):TCP Socket 编程

问题 今天考察网络编程的基础知识。 在基于 TCP 协议的网络 【socket 编程】中可能会遇到很多异常&#xff0c;在下面的相关描述中说法正确的有哪几项呢&#xff1f; A. 在建立连接被拒绝时&#xff0c;有可能是因为网络不通或地址错误或 server 端对应端口未被监听&#x…...

基础学习(4): Batch Norm / Layer Norm / Instance Norm / Group Norm

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1 batch normalization(BN)2 Layer normalization (LN)3 instance normalization (IN)4 group normalization (GN)总结 前言 对 norm/batch/instance/group 这…...

局域网内Docker镜像共享方法

在局域网内将Docker镜像构建并传输到另一台电脑&#xff0c;可以通过以下几种方法实现。以下是具体步骤及注意事项&#xff0c;结合不同场景的适用方案&#xff1a; 方法一&#xff1a;使用 docker save 和 docker load 传输镜像文件 步骤说明 在构建机上保存镜像 通过 docker…...

Idea集成AI:CodeGeeX开发

当入职新公司&#xff0c;或者调到新项目组进行开发时&#xff0c;需要快速熟悉项目代码 而新的项目代码&#xff0c;可能有很多模块&#xff0c;很多的接口&#xff0c;很复杂的业务逻辑&#xff0c;更加有与之前自己的代码风格不一致的现有复杂代码 更别提很多人写代码不喜…...

HTTP HTTPS RSA

推荐阅读 小林coding HTTP篇 文章目录 HTTP 80HTTP 响应码1xx&#xff1a;信息性状态码&#xff08;Informational&#xff09;2xx&#xff1a;成功状态码&#xff08;Success&#xff09;3xx&#xff1a;重定向状态码&#xff08;Redirection&#xff09;4xx&#xff1a;客户端…...

【深度学习与大模型基础】第10章-期望、方差和协方差

一、期望 ——————————————————————————————————————————— 1. 期望是什么&#xff1f; 期望&#xff08;Expectation&#xff09;可以理解为“长期的平均值”。比如&#xff1a; 掷骰子&#xff1a;一个6面骰子的点数是1~6&#x…...

Elasticvue-轻量级Elasticsearch可视化管理工具

Elasticvue一个免费且开源的 Elasticsearch 在线可视化客户端&#xff0c;用于管理 Elasticsearch 集群中的数据&#xff0c;完全支持 Elasticsearch 版本 8.x 和 7.x. 功能特色&#xff1a; 集群概览索引和别名管理分片管理搜索和编辑文档REST 查询快照和存储库管理支持国际…...

危化品经营单位安全生产管理人员备考要点

危化品经营单位安全生产管理人员备考要点 &#x1f4cc; 考试核心内容 ✅ 必考法规&#xff1a; 《危险化学品安全管理条例》重点条款&#xff08;如经营许可条件&#xff09; GB 18218-2018《重大危险源辨识》新标准 安全生产法律责任&#xff08;罚款金额/刑事责任&…...

【python】OpenCV—Tracking(10.6)—People Counting

文章目录 1、功能描述2、代码实现3、效果展示4、完整代码5、涉及到的库函数6、参考来自 更多有趣的代码示例&#xff0c;可参考【Programming】 1、功能描述 借助 opencv-python&#xff0c;用 SSD 人形检测模型和质心跟踪方法实现对人群的计数 基于质心的跟踪可以参考 【pyt…...

使用KeilAssistant代替keil的UI界面

目录 一、keil Assistant的优势和缺点 二、使用方法 &#xff08;1&#xff09;配置keil的路径 &#xff08;2&#xff09;导入并使用工程 &#xff08;3&#xff09;默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...