摘要: 题目大意: 给定一棵n个点的树,每个点有一个权值,m个询问,每次询问树上点x到点y的路径上的第k小数。 思路: dfs后给每个节点一个dfs序,以每个点在他父亲的基础上建立主席树,询问时用(点x+点y-点lca(x,y)-点dad[lca(x,y)])即可得到x到y的链,在上面查询即可。 代码: 阅读全文
posted @ 2016-08-30 19:33 HHshy 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有一个有向无环图,n个点m条边,所有边权为1或2,求一组使所有从1到n的路径长度相同的边权的方案。 思路: 设从1到i的最短路为dist[i],若有一条从x到y的边,则1<=dist[y]-dist[x]<=2,即dist[y]-dist[x]>=1且dist[x]-dist[y]>=- 阅读全文
posted @ 2016-08-30 15:14 HHshy 阅读(350) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有一些木材,可以没有浪费地将一根木材分成几块木板(比如长度为10的木板可以切成长度为8和2的两块木板)。现在你希望得到一些长度的木板,问通过分割木材最多能得到几块想要的木板。 思路: 首先,长度短的木板一定比长度长的木板容易得到,因此若要得到最多的木板,它们必定是所有木板中最短的——可以 阅读全文
posted @ 2016-08-30 12:22 HHshy 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字。棋盘中留有一个空格,空格用0来表示。空格周围的棋子可以移到空格中。要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局 阅读全文
posted @ 2016-08-29 20:42 HHshy 阅读(1114) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 1~n的排列中,要任意一个数要么比它左右的数都大或小,求所有的方案数。 思路: 主要思路:离散。 三个引理: ①在n->n-1的转化过程中,我们删除了一个点后,我们可以将n-1个点视为仍是1~n-1的排列。 ②在若排列Pn为一个合法抖动子序列,则交换i∈[1,n)与i+1,必能得到另一个 阅读全文
posted @ 2016-08-16 10:48 HHshy 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 给你一些子网,求它们在整个网段的补集。 思路: 将子网转换成二进制建一棵Trie,直接DFS搜到没有了就记下来输出。注意:所给的子网会有交集,若搜到结尾就不向下搜了。 代码: 阅读全文
posted @ 2016-08-09 19:04 HHshy 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求一些字符串在一段文章中出现的次数。 思路: AC自动机的经典应用,建完自动机直接将队列里的元素调Fail指针记录即可。 代码: 阅读全文
posted @ 2016-08-09 18:55 HHshy 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有一个长度为n的序列,求1≤l1≤r1<l2≤r2≤n使得(⊕r1i=l1ai)+(⊕r2i=l2ai)最大,输出这个最大值。 思路: 用Trie求出前缀异或和以及后缀异或和,再求出前缀异或和以及后缀异或和中最大的,前后相加,求最大值。用可持久化Trie求异或和也可(较慢)。 代码: T 阅读全文
posted @ 2016-08-09 18:41 HHshy 阅读(1491) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 有n个字符串,编号为1~n,求每一个字符串在其他字符串中以它为后缀的字符串中编号第k小的字符串的编号。 思路: 将字符串倒过来建Trie,记录每个结尾节点的编号(可能会有重复,所以开一个vector记录)。再对trie树进行dfs序,记录结尾节点的子树区间。区间第k小,自然用可持久化线段 阅读全文
posted @ 2016-08-09 18:19 HHshy 阅读(534) 评论(0) 推荐(0) 编辑
摘要: 题目大意: 求字符串的最长回文子串的长度。 思路: Manacher板题,Hash可能会T。要学习Manacher,可参考https://www.felix021.com/blog/read.php?2040 代码: 阅读全文
posted @ 2016-08-03 19:08 HHshy 阅读(180) 评论(0) 推荐(0) 编辑