P3252 [JLOI2012]树
题目描述
在这个问题中,给定一个值S和一棵树。在树的每个节点有一个正整数,问有多少条路径的节点总和达到S。路径中节点的深度必须是升序的。假设节点1是根节点,根的深度是0,它的儿子节点的深度为1。路径不必一定从根节点开始。
输入格式
第一行是两个整数N和S,其中N是树的节点数。 第二行是N个正整数,第i个整数表示节点i的正整数。 接下来的N-1行每行是2个整数x和y,表示y是x的儿子。
输出格式
输出路径节点总和为S的路径数量。
简单的思路就是先构造一棵树,然后便利树,因为深度要递增,所以我们要从一个点不断的去找叶子节点。
链式 前向星存图
struct node
{
int w;//代表这条边的边权数值;
int e;//代表以这条边为结尾的点的下标值;
int next;//表示与第i条边同起点的上一条边的存储位置
}ed[maxn];
int head [maxn];//用来存储边的位置
int tot =;
void add (int u,int v,int w)
{
ed[++tot].w=w;//表示第i条边的权职是多少
ed[tot].e=v;//表示第i条边的终点
ed[tot].next=head[u];//head[i]表示以i为起点最后一条边的存储位置
head[u]=tot++;
}
因为这道题不涉及到权值的问题,所以我们就不作考虑。
那这道题的链前就可以写为:
struct node
{
int u;
int v;
}to[];
void add(int x,int y)
{
to[++tot].u=head[x];//head[i]表示以i为起点最后一条边的存储位置
to[tot].v=y;//表示i条边的终点,也就是所连的节点
head[x]=tot;//一共所连的边数
}
遍历一棵树可以用dfs但是由于这道题的数据范围,我们还需要再加一个剪枝。
如果当前节点和已经超过s,我们就不需要继续往下搜索了。
搜索的时候,深度需要升序,我们只能往下找当前节点的子节点。
但是这样还不够,就即使加了剪枝依然会t掉4个点,所以我加了一个小小的读入优化,就神奇的过辽!
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[];
int st,ed;
int read()
{
int x = ,a = ;
char ch = getchar();
while(ch < '' || ch > ''){
if(ch == '-')x = -;
ch = getchar();
}
while(ch <= ''&&ch >= ''){
a = a * + ch - '';
ch = getchar();
}
return x*a;
}
struct node
{
int u;
int v;
}to[];
int fa[],head[],x,y,n,s,tot=,ans=;
void add(int x,int y)
{
to[++tot].u=head[x];
to[tot].v=y;
head[x]=tot;
}
void dfs(int x,int dis)
{
if (dis>s)
return;
if (dis==s)
{
ans++;
return;
}
for (int i = head[x];i>;i=to[i].u)
{
int nxt=to[i].v;
if (fa[x]!=nxt)
dfs(nxt,dis+a[nxt]);
}
}
int main()
{
n = read();
s = read();
memset(head, -, sizeof(head));
for (int i = ;i <= n;i++)
{
a[i] = read();
fa[a[i]]=a[i];
}
for (int i = ;i <= n-;i++)
{
st=read();
ed=read();
add(st,ed);
fa[ed]=st;
}
for (int i = ;i <= n;i++)
{
dfs(i,a[i]);
}
cout<<ans<<endl;
return ;
}
P3252 [JLOI2012]树的更多相关文章
- 洛谷——P3252 [JLOI2012]树
P3252 [JLOI2012]树 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度 ...
- 洛谷 P3252 [JLOI2012]树
P3252 [JLOI2012]树 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度 ...
- 洛谷P3252 [JLOI2012]树
题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...
- 题解 P3252 【[JLOI2012]树】
\(\Huge{[JLOI2012]树}\) 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点 ...
- BZOJ2783: [JLOI2012]树 dfs+set
2783: [JLOI2012]树 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 588 Solved: 347 Description 数列 提交文 ...
- 2783: [JLOI2012]树( dfs + BST )
直接DFS, 然后用set维护一下就好了.... O(nlogn) ------------------------------------------------------------------ ...
- 【BZOJ2783】[JLOI2012]树 DFS+栈+队列
[BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节 ...
- BZOJ2783: [JLOI2012]树
Description 数列 提交文件:sequence.pas/c/cpp 输入文件:sequence.in 输出文件:sequence.out 问题描述: 把一个正整数分成一列连续的正整数之和.这 ...
- BZOJ2783: [JLOI2012]树(树上前缀和+set)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1215 Solved: 768[Submit][Status][Discuss] Descriptio ...
随机推荐
- Git详细命令
Git Guidegit的三种方式只在本地使用:将本地仓库上传到Github:下载GitHub上的仓库:1.只在本地使用在Git Bush上输入命令 mkdir git-demo-1 ——创建一个目录 ...
- 041-PHP把闭包函数当做参数传递
<?php //把闭包函数当做参数传递 function demo($obj){ $obj('我爱PHP'); } # 传一个闭包过去 demo( function($txt){ echo $t ...
- 【机器学习实战学习笔记(2-2)】决策树python3.6实现及简单应用
文章目录 1.ID3及C4.5算法基础 1.1 计算香农熵 1.2 按照给定特征划分数据集 1.3 选择最优特征 1.4 多数表决实现 2.基于ID3.C4.5生成算法创建决策树 3.使用决策树进行分 ...
- String巩固
About String in Java 如今做了一个重大决定,不定期温习The Basement Of Java String对象的认知简述 首先 String不属于 8种基本数据类型, Strin ...
- pycharm 配置 github 版本控制 VCS
场景:github上没有repository,将pycharm中的工程push到github 1.在pycharm中登录github 2.新建工程后,选择“share project on githu ...
- 一条 SQL 在 Apache Spark 之旅
转载自过往记忆大数据 https://www.iteblog.com/archives/2561.html Spark SQL 是 Spark 众多组件中技术最复杂的组件之一,它同时支持 SQL 查询 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 信号处理
信号是由操作系统传给进程的中断,会提早终止一个程序.在 UNIX.LINUX.Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断. 有些信号不能被程序捕获,但是下表所列信 ...
- springboot - 映射HTTP Response Status Codes 到 静态 HTML页面
1.总览 2.代码 1).pom.xml <dependencies> <dependency> <groupId>org.springframework.boot ...
- SpringBoot+SpringSecurity之如何forword到登录页面
当我们在项目中引入了SpringSecurity框架进行身份校验的时候,如果某个请求需要用户身份认证,那么SpringSecurity会将用户redirect到登录页面.但是有些时候我们希望是forw ...
- Arduino -- functions
For controlling the Arduino board and performing computations. Digital I/O digitalRead() digitalWrit ...