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 ...
随机推荐
- 修改tomcat的字符集问题
转 默认情况下,tomcat使用的是iso8859-1的编码编码方式,浏览器的embed标签中src指向的地址要通过tomcat去解析.如果包含中文,采用这种编码方式就会出现乱码问题,而在这种情况下, ...
- 全选checkbox只能执行一次的问题
现象:第一次运行,点select all那个checkbox,可以全选,再点一次,也可以全部取消.但是,之后不管怎样点击,都没有用了…… <input type="checkbox&q ...
- 【转】ASP.NET Core MVC/WebAPi 模型绑定探索
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- Create Table操作
CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据 ...
- opencv python训练人脸识别
总计分为三个步骤 一.捕获人脸照片 二.对捕获的照片进行训练 三.加载训练的数据,识别 使用python3.6.8,opencv,numpy,pil 第一步:通过笔记本前置摄像头捕获脸部图片 将捕获的 ...
- CSU-ACM2020寒假集训比赛2
A - Messenger Simulator CodeForces - 1288E 两种解法,我选择了第二种 mn很好求,联系过就是1,没联系过就是初始位置 第一种:统计同一个人两次联系之间的出现的 ...
- tornado和vue的模板冲突解决方法
tornado和vue的模板冲突解决方法 Vue的插值表达式和tornado的模板都为一对花括号,可以通过修改vue的插值表达式的符号来解决这个问题,具体方法如下: var vm = new Vue( ...
- python -- unittest测试用例函数无法传参的处理方法(ddt)
1.超继承 重写测试用例类的init方法,如下所示. import requests import unittest class XiaoheiCases(unittest.TestCase): de ...
- HDU 1576:A/B
A/B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 04-String——课后作业1:字串加密
题目:请编写一个程序,加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 程序设计思想:首先由用户选择是加密还是解密,利用String类中的charAt函数依次取出字串中的字符, ...