摘要: 挺好的一道题,本身不难,就把求两个点的LCA变为求三个点两两求LCA,不重合的点才是最优解。值得一提的是,最后对答案的处理运用差分的思想:假设两点 一点深度为d1,另一点 深度为d2,它们LCA深度为d3,这二者之间的距离即为d1+d1-2*d3,只要将这两点推广成三点即可。 阅读全文
posted @ 2019-07-24 14:04 handsome_zyc 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 这道题相当于倍增求LCA的板子,我们只要构建一棵树,然后距离就是x的深度+y的深度 - LCA(x,y)的深度; 阅读全文
posted @ 2019-07-24 13:58 handsome_zyc 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 这道题是我们考试的第一题,非常水,就是一个树的直径的板子。详见上一篇博客。 阅读全文
posted @ 2019-07-24 13:56 handsome_zyc 阅读(397) 评论(2) 推荐(0) 编辑
摘要: ① 两次dfs 方法:先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径 证明如下: ①若P已经在直径上,根据树的直径的定义可知Q也在直径上且为直径的一个端点 ②若P不在直径上,我们用反证法,假设此时WQ不是直径,AB是直径 >若AB与PQ有交点C,由于P 阅读全文
posted @ 2019-07-24 13:53 handsome_zyc 阅读(11877) 评论(2) 推荐(2) 编辑
摘要: 思路: 首先先将每个输入的数据与n的最大公约数求出(因为如果a[i]是密码,那么所有a[i]与n最大公约数的倍数也是密码;于是如果a[i]不是密码,那么所有a[i]与n最大公约数的倍数也都不是密码)再从1到sqrt(a[k])(其实1到a[k]也行)找,最小且符合条件就是最小密码。 阅读全文
posted @ 2019-07-24 13:42 handsome_zyc 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 一道经典的BFS 用四个for搜索四位就行了,只要能推出怎么只变4位中的一位就很水了 阅读全文
posted @ 2019-07-24 13:34 handsome_zyc 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 深搜,只不过是三维的。 阅读全文
posted @ 2019-07-24 13:30 handsome_zyc 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 深搜,向四个方向,在不越界的情况下一直闷头走,直到撞墙。到达终点就输出,没到就回溯。 阅读全文
posted @ 2019-07-24 13:28 handsome_zyc 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 思路 dfs(只不过要用邻接表存)邻接表是由表头结点和表结点两部分组成,其中表头结点存储图的各顶点,表结点用单向链表存储表头结点所对应顶点的相邻顶点(也就是表示了图的边)。在有向图里表示表头结点指向其它结点(a->b),无向图则表示与表头结点相邻的所有结点(a—b) 阅读全文
posted @ 2019-07-24 13:24 handsome_zyc 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 我个人感觉就是一道bfs的变形,还是对bfs掌握不好的人有一定难度。 本题思路: 大体上用bfs搜,用map来去重,在这里只需要一个队列,因为需要较少步数达到的状态一定在步数较多的状态之前入队列。 阅读全文
posted @ 2019-07-24 13:18 handsome_zyc 阅读(286) 评论(0) 推荐(0) 编辑