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