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

C 游游的二进制树

题目描述

游游拿到了一棵树,共有nnn个节点,每个节点都有一个权值:0或者1。这样,每条路径就代表了一个二进制数。
游游想知道,有多少条路径代表的二进制数在[l,r][l,r][l,r]区间范围内?
(请注意:路径长度至少为1,例如,节点3到节点3虽然有一个权值,但并不是合法路径!)

输入描述:

第一行输入三个正整数n,l,r用空格隔开。
第二行输入一个长度为n的01串,第i个字符代表i号节点的权值。
接下来的n−1行,每行输入两个正整数u和v,代表u号节点和v号节点有一条边连接。
1≤n≤103
1≤u,v≤n
1≤l≤r≤1014

输出描述:

 

一个整数,代表合法的路径条数。

示例1

输入

4 4 5
1010
1 2
2 3
3 4

输出

3

说明

 

路径1-2-3代表的二进制数为5。

路径3-2-1代表的二进制数为5。

路径4-3-2-1代表的二进制数为5。

示例2

输入

3 1 2
100
1 2
1 3

输出

6

说明

任意合法路径均在区间[l,r]内。

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
vector<long long>h[N];
string s;
long long n,l,r,ans;void dfs(int u,int fa,long long mid){mid=mid*2+s[u-1]-'0';  //每次加上该点位的权值 if(mid>r)return;  //如果大于r则该路径不合法,退出递归 if(fa&&mid>=l)ans++;  //fa代表节点数 fa大于1代表最少2个节点 for(int v:h[u]){     //if(fa==v)continue;//不合法了,节点不会回头 dfs(v,u,mid);     //遍历以这一个节点的第一个值为节点的路径 }
}int main(){cin>>n>>l>>r>>s;for(int i=1;i<n;i++){int x,y;cin>>x>>y;h[x].push_back(y);  //可以存储以一个数为起点,能达到的所有点 h[y].push_back(x);}for(int i=1;i<=n;i++)dfs(i,0,0);     //从第一个点开始查询,搜索所有以该点为起点的路径 cout<<ans<<endl;return 0;
}

http://www.lryc.cn/news/102513.html

相关文章:

  • 收发存和进销存有什么区别?
  • 小程序 账号的体验版正式版的账号信息及相关配置
  • AIGC(Artificial Intelligence Generated Content)和 Web3对比,未来发展
  • 机器学习之Boosting和AdaBoost
  • 汇编语言预定义寄存器和协处理器
  • 【前缀和】974. 和可被 K 整除的子数组
  • linux页框回收之shrink_node函数源码剖析
  • 网络运维基础问题及解答
  • 【RabbitMQ】之保证数据不丢失方案
  • 插入排序算法
  • Linux标准库API
  • 腾讯云—自动挂载云盘
  • 为Win12做准备?微软Win11 23H2将集成AI助手:GPT4免费用
  • Opencv Win10+Qt+Cmake 开发环境搭建
  • Matlab实现光伏仿真(附上30个完整仿真源码)
  • JSON.stringify()与JSON.parse()
  • neo4j教程-安装部署
  • 网络面试合集
  • java+springboot+mysql智慧办公OA管理系统
  • 【教程】Tkinter实现Python软件自动更新与提醒
  • 音频深度学习变得简单:自动语音识别 (ASR),它是如何工作的
  • 反射简述
  • Kotlin泛型的协变与逆变
  • 【后端面经】微服务构架 (1-6) | 隔离:如何确保心悦会员体验无忧?唱响隔离的鸣奏曲!
  • 复习之kickstart无人职守安装脚本
  • CSS动画——实现波浪摇摆效果...
  • 【MyBatis学习】Spring Boot(SSM)单元测试,不用打包就可以测试我们的项目了,判断程序是否满足需求变得如此简单 ? ? ?
  • JavaScript 类
  • SpringBoot的static静态资源访问、参数配置、代码自定义访问规则
  • IO进、线程——线程(线程的创建、线程的退出、线程的回收、线程的分离和多线程并发编程)