输出路径节点总和为S的路径数量。

思路

先准备数据结构:(描述思路时会用到,先给出定义和使用)

1.vector tree[100000],邻接表(把树看成DAG图)

2.int a[100000]={0},前缀和数组

3.bool color[100001]={false},dfs时使用,true代表访问过,false代表没访问过

4.int weight[100000],存储权值(邻接表不存权值)

5.set r,找根节点(r内的为可能是根节点的元素)

先读入n,s;再读入权值,并将i存入邻接表,权值存入weight。

接着读入x、y,将y插在tree[i]的后面并从集合r中删除y(y有双亲结点(父节点),不可能是根)

最后r中剩下的就是根,存起来(我的root变量),前缀和数组a[0]清零,接着进入dfs:(用递归)

将color[当前访问顶点编号(我的now变量)]置成true,表示已访问,接着计算该节点的前缀和*,然后找结点继续dfs,当结点访问完毕后,用二分搜索找前缀和数组中是否有a[现深度(deep)]-s(在dfs函数里设个变量名打成p了,不过没有关系),若有路径数量++。

*:见附录1

犯的错误

1.二分查找找的是a[deep]-s而不是s。

2.应该用递归实现dfs,而不是用栈,应为用递归比较熟练,不容易错。

3.树根不一定是零,需要找树根。

4.应该用weight数组存权值而不是tree[XX][0]。

收获

1.要注意前缀和:a[i]+a[i+1]+···+a[j]=(a[1]+a[2]+···+a[i-1])-(a[1]+a[2]+a[3]+a[4]+···+a[j])

2.在条件允许的情况下,要用自己熟练的方法解体。

3.不要想当然,不要有侥幸心理。

4.在n<=100000的情况下,不要怕多开几个数组。

附录一

这里用的前缀和是一条从根节点出发的路径上的前缀和

如上图,它原来的路径是12--11--7--6--3,现在变成了12--11--7--6--5,所以数组变成了12、23、30、36、41。

现在路径变成了12--11--7--8,数组变成了12、23、30、38、41。

由于数组是有序的,所以查找有没有路经总和为S是要用二分查找优化。

java编写的atm机项目结题报告_结题报告 - eason66 - 博客园相关推荐

  1. java编写的atm机项目结题报告_java编写的atm机项目结题报告.docx

    java编写的atm机项目结题报告 java编写的atm机项目结题报告 篇一:java自动取款机模拟程序报告含源代码 合肥学院 计算机科学与技术系 课程设计报告 XX-XX学年第一学期 课学学专指 业 ...

  2. java编写的atm机项目结题报告_《计算机学院视频教程网站的创建》教学研究项目结题报告.pdf...

    <计算机学院视频教程网站的创建>教学研究项目结题报告.pdf 还剩 8页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: <计算机学院 ...

  3. centos java 集成环境搭建,CentOS上搭建Tomcat环境并配置服务自启动 - Sonnyb - 博客园...

    下载安装JDK 卸载原装的OpenJDK(如果有) # 查看是否安装Java java -version # 查看Java的安装包信息 rpm -qa | grep java # 卸载原装Java,为 ...

  4. java 主题爬虫_主题爬虫 - 长颈鹿Giraffe - 博客园

    参考了一些论文和网上的资料以及清华大学出版社出版的<自己动手写网络爬虫>这本书中的部分章节,设计了主题爬虫的主要体系结构如下图所示: Heritrix是一个由 java 开发的.开源的网络 ...

  5. java synoch 加锁_线程间通信 - HappyCowboy - 博客园

    线程之间需要一些协调通信,来共同完成一件任务.Java多线程中,线程之间通信最常用的两个方法是wait()与notify() 使用wait()与notify()实现线程间的通信,需注意: ①wait( ...

  6. java小光棍数_小光棍数 - NYNU_ACM - 博客园

    小光棍数 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述最近Topcoder的XD遇到了一个难题,倘若一个数的三次方的后三位是111,他把这样的数称为小光棍数.他已经知道 ...

  7. java圆和椭圆的关系_圆与椭圆 - brifuture - 博客园

    一个单位圆的方程是 X2 + Y2 = 1,画在坐标系中: 对于圆来说,由于它是高度对称的,旋转属性对它而言意义不大. 在 canvas 画布上绘制一个圆很简单,有两种方法: 1. 使用 html5 ...

  8. java程序模拟atm机_Java项目实现模拟ATM机

    本文实例为大家分享了Java实现模拟ATM机的具体代码,供大家参考,具体内容如下 项目名称 模拟ATM机 项目描述 简单实现ATM机功能 代码实现 测试类 public class Test { // ...

  9. java个人主页作业,个人项目 - 作业 - 18软件前端、JAVA WEB方向 - 班级博客 - 博客园...

    Deadline(截止时间): 2020-10-09 23:00pm 零.任务背景 目前各个团队已经开始分析需求.设计原型,不久后各团队将开始设计并开发软件,在此之前我们需要具备开发能力,所以请阅读& ...

  10. 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 - 左潇龙 - 博客园...

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

最新文章

  1. 汉语科技术语识别实验结果
  2. JAVA 泛型与反射
  3. jquery插件编写学习
  4. JavaScript 模拟事件触发
  5. IOS第七天(2:UiTableView 加上数据分离)
  6. C++设计模式之三 单例模式
  7. mysql中的编号怎么自动加_MySQL中实现ID编号自动增加的方法
  8. 「腾讯地图」小程序插件
  9. 输出100-1000之间的水仙花数 是三位数 水仙花数就是 每个位上的数字的三次方的和仍然为原数字 例如:153是一个“水仙花数“,因为153=1的三次方+5的三次方+3的三次方;
  10. Python实现Global Reed-Xiaoli(GRX)高光谱目标检测算法
  11. 方正飞鸿:OA系统先进性如何在工作流中体现
  12. 离职,我应该做什么?
  13. quartus II使用
  14. Python实现天气查询功能(外加Excel技巧)
  15. 《商业数据分析》读书笔记(一)
  16. android 输入法如何启动流程_android输入法状态控制
  17. android intent.action pick,android intent pick
  18. 你真的不懂 yml !
  19. CVPR 2022 Oral 学习不分割的内容:关于小样本分割的新视角
  20. OV4689 和IMX179的dts中节点的区别,以及dts节点的注释说明,基于rv1108平台

热门文章

  1. 设置网站301跳转,直接输入主域名跳转至www域名
  2. chrome浏览器google搜索结果打不开
  3. python 实现 Cmn 的排序 阶乘
  4. 安卓案例-简单图片查看器
  5. opencv python 巡线 最小二乘法
  6. 测试体质的软件有哪些,有哪些APP可以测体脂?测体脂率APP分享
  7. Sequence (矩阵快速幂+快速幂+费马小定理)
  8. cisco3560交换机的策略路由的设置
  9. 计算机内存占用过高,内存,教您电脑内存占用高怎么办
  10. 电热毯UL964标准上架亚马逊所需资料流程