题目描述

在这个问题中,给定一个值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]树的更多相关文章

  1. 洛谷——P3252 [JLOI2012]树

    P3252 [JLOI2012]树 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度 ...

  2. 洛谷 P3252 [JLOI2012]树

    P3252 [JLOI2012]树 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度 ...

  3. 洛谷P3252 [JLOI2012]树

    题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深度为1.路径不 ...

  4. 题解 P3252 【[JLOI2012]树】

    \(\Huge{[JLOI2012]树}\) 题目描述 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点 ...

  5. BZOJ2783: [JLOI2012]树 dfs+set

    2783: [JLOI2012]树 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 588  Solved: 347 Description 数列 提交文 ...

  6. 2783: [JLOI2012]树( dfs + BST )

    直接DFS, 然后用set维护一下就好了.... O(nlogn) ------------------------------------------------------------------ ...

  7. 【BZOJ2783】[JLOI2012]树 DFS+栈+队列

    [BZOJ2783][JLOI2012]树 Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节 ...

  8. BZOJ2783: [JLOI2012]树

    Description 数列 提交文件:sequence.pas/c/cpp 输入文件:sequence.in 输出文件:sequence.out 问题描述: 把一个正整数分成一列连续的正整数之和.这 ...

  9. BZOJ2783: [JLOI2012]树(树上前缀和+set)

    Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1215  Solved: 768[Submit][Status][Discuss] Descriptio ...

随机推荐

  1. python3调用微软js引擎ChakraCore

    有关ChakraCore介绍请移步:https://github.com/Microsoft/ChakraCore 使用案例GitHub源码:https://github.com/pyAppman/C ...

  2. 056-for循环中continue的使用

    <?php ; $i <= ; $i++) { //for循环输出数值 == ) //判断变量是否为3的整数倍 { continue;//跳过本次循环剩余语句 } echo "$ ...

  3. Web安全常见问题及解决方法

    关于Web安全,我们最早听到最多的就是SQL注入.例如用户在系统登录界面输入用户名和密码,提交以后,后端直接拿到数据就拼接SQL语句去查询数据库.如果在输入时进行了恶意的SQL拼装,那么最后生成的SQ ...

  4. spark任务日志配置

    样例代码: public class SparkTest { private static Logger logger = Logger.getLogger(SparkTest.class); pub ...

  5. 一万五千字的Dissertation你真的会写了吗?

    在英国留学的同学们想要顺利毕业,就必须要过Dissertation这一关.而一篇Dissertation字数可能多大一万五千字,其写作难度之大让很多留学生疯狂吐槽.那么这么多字的Dissertatio ...

  6. Node.js NPM Package.json

    章节 Node.js NPM 介绍 Node.js NPM 作用 Node.js NPM 包(Package) Node.js NPM 管理包 Node.js NPM Package.json Nod ...

  7. ELK 介绍

    章节 ELK 介绍 ELK 安装Elasticsearch ELK 安装Kibana ELK 安装Beat ELK 安装Logstash ELK是什么? ELK是3个开源产品的组合: Elastics ...

  8. JavaScript获取当前日期前后7天的日期

    function fun_date(aa){ var date1 = new Date(), time1=date1.getFullYear()+"-"+(date1.getMon ...

  9. spring源码 HierarchicalBeanFactory接口

    HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean. /* * Copyright 2002-2012 the origi ...

  10. wget 403 forbidden

    CMD: wget --user-agent="Mozilla" down_url wget -U Mozilla 下载地址 wget -U NoSuchBrowser/1.0 下 ...