【LeetCode】Biweekly Contest 12:Tree Diameter 求无向树的最长路径&求树的半径

一、概述

输入一个无向树,输出其距离最远的两个叶子节点之间的距离。

这题做的我要哭了。做到最后也没做出。十分心酸。然后看了大佬们的代码,发现是我最开始的出发点就错了。

二、分析

1、我的做题经过

最开始想了一会,然后决定DFS。怎么DFS呢?由于输入的是两个端点,我就把输入转化成二维数组。

把无向树转化为无向图。暴力对每一个节点DFS,报TLE。

然后优化,怎么优化?不再对每个节点DFS,只对叶子节点DFS。多过了几个testcase。还是TLE。不知道怎么优化了。

遂换算法。

我就想,能不能用二维数组储存每个节点到其他所有节点的当前距离呢?我遍历输入的vector,有一个[i,j],那么表示节点i到节点j的距离为1,令M[i][j]=1,然后看所有已知节点,若其可以连接到i,那么就可以连接到j,且连接到j的距离是连接到i的距离加一。好像可以。只需要遍历一次输入向量就好了。沾沾自喜。只需要遍历一次输入,循环体中对每个节点遍历一次,大概是O(m*n)的复杂度。这里m是边的数量,n是节点序号的最大值。

喜个鸡儿。先不说m会很大,n也会很大——这个M是一个巨大的稀疏矩阵暂且不表,单看M的大小就吃不消。最开始设置M为1000*1000。过到第15个testcase,有序号为1020的了。我往上加到5000,过到19个,再加就爆栈。怎么办?不能用了。

改吧。把稀疏数组改成unordered_map,压缩了所有的不相连的节点。又做。真的蠢啊同志们,想一想,都是一个无向图了,怎么可能是稀疏矩阵呢?肯定都是有值的。根本压缩不了不说,map的遍历还不能用下标,只能用迭代器。这天杀的迭代器慢到爆炸,TLE来的比之前还早。我就崩溃了。

既然知道压缩不了,那么我不用int,用short会不会好一点?没用,7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值