leetcode 834. 树中距离之和(dp)

给定一个无向、连通的树。树中有 N 个标记为 0...N-1 的节点以及 N-1 条边 。第 i 条边连接节点 edges[i][0] 和 edges[i][1] 。返回一个表示节点 i 与其他所有节点距离之和的列表 ans。示例 1:输入: N = 6, edges = [[0,1],[0,2],[2,3],[2,4],[2,5]]
输出: [8,12,6,10,10,10]
解释: 
如下为给定的树的示意图:0/ \
1   2/|\3 4 5我们可以计算出 dist(0,1) + dist(0,2) + dist(0,3) + dist(0,4) + dist(0,5) 
也就是 1 + 1 + 2 + 2 + 2 = 8。 因此,answer[0] = 8,以此类推。
说明: 1 <= N <= 10000

代码

class Solution {int[] sz,dp,re;Map<Integer,List<Integer>> map3=new HashMap<>();public int[] sumOfDistancesInTree(int N, int[][] edges) {re=new int[N];sz=new int[N];dp=new int[N];for (int i=0;i<N;i++)map3.put(i,new ArrayList<>());for(int[] edge:edges)//邻接表{map3.get(edge[0]).add(edge[1]);map3.get(edge[1]).add(edge[0]);}getSumOfDistancesInTree(0, -1);getSumOfDistancesInTree2(0, -1);return re;}public void getSumOfDistancesInTree(int  cur, int father) {//从根节点向下统计距离dp[cur]=0;sz[cur]=1;for(int next:map3.get(cur)){if(next==father) continue;getSumOfDistancesInTree(next,cur);dp[cur]+=dp[next]+sz[next];sz[cur]+=sz[next];}}public void getSumOfDistancesInTree2(int  cur, int father) {re[cur]=dp[cur];for(int next:map3.get(cur)){if(next==father) continue;int pn=dp[next],pc=dp[cur],sn=sz[next],sc=sz[cur];dp[cur]-=dp[next]+sz[next];sz[cur]-=sz[next];dp[next]+=dp[cur]+sz[cur];sz[next]+=sz[cur];//将父子节点颠倒,对应的值发生改变getSumOfDistancesInTree2(next,cur);dp[next]=pn;dp[cur]=pc;sz[cur]=sc;sz[next]=sn;//还原父子节点}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392885.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS设计指南(读书笔记 - 背景)

本文转自william_xu 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/williamx/1140006&#xff0c;如需转载请自行联系原作者

在计算机网络中 带宽是什么,在计算机网络中,“带宽”用____表示。

答案查看答案解析:【解析题】计算机的发展经历了4个时代&#xff0c;各个时代划分的原则是根据()。【解析题】计算机网络的最主要的功能是______。【解析题】冯.诺依曼提出的计算机工作原理为____。【解析题】计算机的通用性使其可以求解不同的算术和逻辑问题&#xff0c;这主要…

如何在iOS上运行React Native应用

by Soujanya PS通过Soujanya PS 如何在iOS上运行React Native应用 (How to run a React Native app on iOS) I recently started to develop a React-Native app on iOS. This was my first foray into native app development. I was surprised by the ease and level of abs…

导出excel 后 页面按钮失效(页面假死)

在 page_load 里加上如下代码&#xff1a;string beforeSubmitJS "\nvar exportRequested false; \n"; beforeSubmitJS "var beforeFormSubmitFunction theForm.onsubmit;\n"; beforeSubmitJS "theForm.onsubmit function(){ \n"; …

Mysql分组查询group by语句详解

(1) group by的含义:将查询结果按照1个或多个字段进行分组&#xff0c;字段值相同的为一组(2) group by可用于单个字段分组&#xff0c;也可用于多个字段分组 select * from employee; --------------------------------------------- | num | d_id | name | age | sex | homea…

leetcode 75. 颜色分类(双指针)

给定一个包含红色、白色和蓝色&#xff0c;一共 n 个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 此题中&#xff0c;我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码…

火车头如何才能设置发布的时候,如果是有html代码就直接的转换掉,互联网上笑话抽取及排重---火车头采集器的使用和MD5算法的应用...

10011311341 吕涛、10011311356李红目的&#xff1a;通过熟悉使用火车头采集器&#xff0c;在网络上采取3万条笑话并进行排重&#xff0c;以此来熟悉web文本挖掘的一些知识。过程&#xff1a;本次学习&#xff0c;主要分成两个部分。第一部分是笑话文本的采集&#xff0c;第二部…

Tcp_wrapper

在Linux进程分为&#xff1a;独立进程和非独立进程非独立进程&#xff1a;是依赖于超级守护进程的进程&#xff0c; 且受Xinetd 管理&#xff0c;并在启动服务时 必须启动例子&#xff1a;#chkconfig –level 2345 telnetd on关与chkconfig 的命令&#xff1a;#chkconfig –lis…

angular 动画_如何在Angular 6中使用动画

angular 动画介绍 (Introduction) Animation is defined as the transition from an initial state to a final state. It is an integral part of any modern web application. Animation not only helps us create a great UI but it also makes the application interesting…

win10上面安装win7的虚拟机怎么相互ping通

最近干了一些很蛋疼的事&#xff0c;这些都是自己踩过的坑&#xff0c;记录下来方便自己以后查阅 首先我的目的就是为了在自己的PC机上面部署一个SVN服务器&#xff0c;然后安装一个客户端&#xff0c;自己写的软件就可以定期入库&#xff0c;做好自己的版本控制&#xff0c;但…

新东方面试知识点记录

3.spring mvc 怎么接受http post 方式提交过来的xml数据&#xff1f;servlet中怎么接受&#xff1f; RequestMapping(value"/jsonPrase", headers {"content-typeapplication/json","content-typeapplication/xml"}) ResponseBody …

win10用计算机名访问文件夹,win10系统提示你当前无权访问该文件夹的解决方法【图文教程】...

Win10系统下&#xff0c;我们在访问或更改某些系统文件夹时&#xff0c;有时会遇到系统提示“你当前无权访问该文件夹”的情况。那么&#xff0c;遇到这种情况的话&#xff0c;我们该怎么办呢&#xff1f;接下来&#xff0c;小编就向大家分享win10系统提示“你当前无权访问该文…

.Net Micro Framework研究—实现SideShow窗体界面

基于MF系统的Windows SideShow界面是非常炫的&#xff08;如下图&#xff09;。既然微软能用.Net Micro Framework实现这么棒的界面效果&#xff0c;我想我们也能做到。 &#xff08;SideShow模拟器界面和游戏程序中的右键菜单—注意菜单弹出后&#xff0c;其它的界面变暗了&am…

leetcode 344. 反转字符串

编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。…

事件捕获(capture)和冒泡事件(Bubble)

PS&#xff1a;这里是我从别人的博客中学习事件捕获和冒泡是的总结&#xff0c;如果你也感兴趣的话&#xff0c;建议你点击链接查看原博客的内容&#xff0c;他们写的都是很经典&#xff01; 对“捕获”和“冒泡”这两个概念&#xff0c;我想我们对冒泡更熟悉一些&…

gulp编译css_如何用gulp缩小CSS

gulp编译cssby Vinicius Gularte由Vinicius Gularte 如何用gulp缩小CSS (How to minify your CSS with gulp) In this article, Im going to show a simple way to automatically minify your CSS files using gulp. ?在本文中&#xff0c;我将展示一种使用gulp自动缩小CSS文…

线段树(区间更改,区间查最值)模板

线段树(区间更改,区间查最值)模板 主要重在理解线段树,理解了怎么改都可以,还有以后不要直接抄模板,要写出自己想的一份代码 &代码&#xff1a; #include <cstdio> #include <bitset> #include <iostream> #include <set> #include <cmath>…

Unity3D项目开发一点经验

我们主要使用3dsmax2010进行制作&#xff0c;输出FBX的类型导入Unity3D中。默认情况下&#xff0c;3dsmax8可以和U3D软件直接融合&#xff0c;自动转换为FBX物体。 注意事项如下&#xff1a; 1.面数控制 在MAX软件中制作单一GameObject物体的面数不能超过65000个三角形&#xf…

leetcode 142. 环形链表 II(set/快慢指针)

给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;则在该链表中没有…

html5 支持表格吗,html5 – 在HTML 5中使用表格很好吗?

简单规则 – 使用表格表格数据&#xff0c;使用其他元素进行演示(使用CSS设计布局)&#xff0c;如div&#xff0c;section&#xff0c;aside&#xff0c;nav等。这为他们所持有的内容提供了意义&#xff0c;而不是为所有内容使用表事实是&#xff0c;开发人员在90年代使用了表格…