摘要: 题意:主串中能找到几个模式串 思路:超详细解释KMP KMP:针对这个代码,解释一下Fail数组的含义:T为主串,P为模式串,Fail代表失配值,即当P[j] != T[i]时,j要指向的位置为Fail[j],当Fail为-1时表示i指针后移。如果使用这个代码,Fail[j]的值的含义为P[0]…P 阅读全文
posted @ 2018-07-12 19:52 KirinSB 阅读(208) 评论(0) 推荐(0) 编辑
摘要: 思路: Prim: 这道题目中有重边 Prim可以先加一个sec数组来保存重边的次小边,这样不会影响到最小生成树,在算次小生成树时要同时判断次小边(不需判断是否在MST中) Kruskal: Kruskal对重边就很友好了,不用考虑 原理是这样的:我们先找最小生成树并用used标记好哪些边是MST的 阅读全文
posted @ 2018-07-12 17:37 KirinSB 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 题意:构成MST是否唯一 思路: 问最小生成树是否唯一。我们可以先用Prim找到一棵最小生成树,然后保存好MST中任意两个点i到j的这条路径中的最大边的权值Max[i][j],如果我们能找到一条边满足:他不是最小生成树中的边,并且它的权值等于Max[i][j],那么他就可以代替MST中的这条边,所以 阅读全文
posted @ 2018-07-12 15:43 KirinSB 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 思路: 设dp[i]为覆盖i所用的最小数量,那么dp[i] = min(dp[k] + 1),其中i - 2b <= k <= i -2a,所以可以手动开一个单调递增的队列,队首元素就是k。 初始状态为dp[0] = 0,注意喷水覆盖的范围是偶数且不重叠,所以插入队列的必是偶数。有牛的地方不能作为边 阅读全文
posted @ 2018-07-12 10:26 KirinSB 阅读(171) 评论(0) 推荐(0) 编辑