摘要: 对于点名串建AC自动机。。数字太大所以写了棵treap>_<...... 然后每个人直接暴力在AC自动机上跑名字就行了。每次匹配到一个节点都要沿着fail链更新答案。 大概显然这样会被随便卡。所以有个小优化就是,沿着fail跳的时候如果之前已经走过了就不要再走了。具体实现用int比bool好一些。( 阅读全文
posted @ 2016-02-17 00:45 czllgzmzl 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 一开始没什么思路...后来想到确定最大硬币面值就知道其他面值能取多少了。。而且结果是可以由较小的面值转移过来的。 f[i]表示最大面值为i时的最小硬币数。a[i]表示第i个物品的价钱。 f[i]=min{ f[ i / j ]- sum{ a[ k ] / i * ( j-1 ) } },(j是i的 阅读全文
posted @ 2016-02-15 17:43 czllgzmzl 阅读(536) 评论(0) 推荐(0) 编辑
摘要: 十分感人的一道题。。虚树+倍增。。 想了半天发现我竟然会写?而且似乎想对了。。。。然而细节打挂调了一个下午>_< 首先把虚树建出来,然后在虚树上跑两遍dfs求出每个点最接近的议事处与距离,再然后计算虚树上每一条边对答案的贡献。。 令mndis[x]表示点x离最近议事处的距离,mnpos[x]表示点x 阅读全文
posted @ 2016-02-13 16:57 czllgzmzl 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 单调队列优化。。。f[k][i][j]表示k个时间段过后,走到点(i,j)时,最多已走过了多少个格子。 因为每个时间段内的方向都是一样的,所以用单调队列优化一下就好了。。。 这题其实就是个多重背包。。一段时间段的长度就是背包容量,而点(i,j)往某个方向最多能走多少格就是物品的数目,物品价值都为1. 阅读全文
posted @ 2016-02-13 11:18 czllgzmzl 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 题目要求最小路径覆盖。。DAG的最小路径覆盖=最长反链=n-对应二分图最大匹配数。。 反链:一些点的集合,使得任意两点之间不存在路径。最长反链:反链里面节点数的最大值。 一开始还以为要跑网络流。。。最后根据黄学长的题解可得,这题应该求的是最长反链TAT 因为是只能往下或者往右的网格图,所以反链的点一 阅读全文
posted @ 2016-02-13 00:10 czllgzmzl 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 找规律题。。。 首先观察样例解释可得。我们只要确定奇数位的情况就行了,并且只要i<=第i个奇数<=2*i-1就是合法的= = 然后我就一直在找规律.................. 最后弃疗跑去看题解....才发现答案不就是卡特兰数吗。。为啥我看半天都没看出来= = 由搜索引擎可得,h(n)=C( 阅读全文
posted @ 2016-02-12 21:44 czllgzmzl 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 还是虚树恩。。模板都能打挂QAQ 先在原树上预处理出mndis[i],表示根节点到节点i 路径上边权的最小值(就是断开i与根的联系的最小花费) 建完虚树在虚树上跑树形DP。。f[i]表示断开 i 所在子树内所有有资源的节点 与根节点的联系的最小花费。 若i 节点没资源:f[i]=min( mndis 阅读全文
posted @ 2016-02-12 20:13 czllgzmzl 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 看题目感觉应该就是传说中的虚树? 然后跑去学了一发。。。自己YY了一下然后挂飞。。于是就只好抄模板了T_T 建完虚树就是个树形dp。。。 对于询问总和:每条边对答案的贡献是边权*一端的节点数*另一端的节点数。(这里的节点不包括建虚树时添上去的点) 对于询问最小值最大值,每次计算出经过这个节点的最长| 阅读全文
posted @ 2016-02-12 20:06 czllgzmzl 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 为啥这年头dp的复杂度也变玄学了>_< 一开始想来想去都觉得会TLE。。。最后无力跑去膜黄学长的题解 http://hzwer.com/5198.html f[i][j][k]表示以i为根的子树中,有j件装备i用于他父亲的合成,共花费k元的最大力量值。。。 具体做法见题解>_<。。。 YY了几个小剪 阅读全文
posted @ 2016-02-12 10:39 czllgzmzl 阅读(722) 评论(0) 推荐(1) 编辑
摘要: 这题数据水得。。。似乎连O(n^3)都能过>_< 第二问一直想不出来。。。跑去看了iwtwiioi神犇的题解 http://www.cnblogs.com/iwtwiioi/p/4160945.html 对于一开始读入的数列a[],令b[i]=a[i]-i(中间要给别的数留空)....补集转化的思想 阅读全文
posted @ 2016-02-11 13:44 czllgzmzl 阅读(479) 评论(0) 推荐(0) 编辑