ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

十二省联考2019做题笔记

2019-04-12 10:37:54  阅读:296  来源: 互联网

标签:连边 派系 限制 SAM 选择 2019 阵营 做题 联考


异或粽子(可持久化Trie、堆)

超级钢琴+可持久化Trie???HNOI D1T1怎么不出这种送分题啊

代码

字符串问题(SAM、记忆化搜索)

一切字符串问题用SAM就完事了

把原串reverse,这样“某个\(A\)串是前面的\(A\)串支配的\(B\)串的前缀”的条件变成了后缀。而以某个串为后缀的串在SAM的fail树上体现为它的子树。所以我们可以在fail树上,每个点向其儿子连边,对于一个支配关系,\(A\)串对应状态向\(B\)串对应状态连边。这样原图的所有关系就体现为了一张图。判一下环、记搜求一下最长路即可。

注意一点:“\(A\)串对应状态向\(B\)串对应状态连边”有可能会导致当前\(A\)串加入之后,会加入一个长度小于\(B\)串长度,但是和\(B\)串在SAM上处于同一状态的\(A\)串;也有可能存在两个不同的\(A\)串在同一个状态,有可能导致算错贡献。解决的方法就是在连边之前拆SAM上的点,让这两种情况不会出现,也就是让这两种情况对应的串处于不同的状态。

最开始沙雕了,想着对dfn序线段树优化连边,然后常数就大了很多……

代码

骗粉过样例

还没有颓到要养生的地步,所以留坑

皮配(背包)

50pts很简单,设\(dp_{i,j,k}\)表示考虑了前\(i\)个学校,蓝阵营\(j\)人、鸭派系\(k\)人的方案数,同一个学校一起转移。复杂度\(O(TNM^2)\)

对于\(k=0\)的情况,因为选择阵营和选择派系之间是独立的,选择哪个阵营不会影响选择哪个派系,反过来也一样。所以总方案数等于分配派系的方案数×分配阵营的方案数,两个分别背包一下。

当\(k=30\)时,会有\(30\)个城市在选择了阵营之后有某些学校不能选择某一个派系,而没有限制的城市跟\(k=0\)相同。我们可以把这\(30\)个城市单独拿出来做50pts的DP,对于其他的做k=0的DP。

但是如果这\(30\)个城市的人数总和很大,复杂度仍然难以接受。但是注意到:对于有限制的城市中没有限制的学校,选择派系跟选择阵营仍然是无关的,所以并不需要在50pts的暴力做法中记录,而是可以放在k=0的DP中计算贡献。

所以设\(f_{i,j,k}\)表示考虑了前\(i\)个有限制的城市,这些城市的所有学校中选择蓝阵营的人数为\(j\),这些城市有限制的学校中选择鸭派系的人数为\(k\)的方案总数,\(g_{i,j}\)表示考虑了前\(i\)个没有限制的城市,选择蓝阵营的总人数为\(j\)的方案数,\(h_{i,j}\)表示考虑了前\(i\)个没有限制的学校,选择鸭派系的总人数为\(j\)的方案数。

\(f\)的转移先枚举当前城市选择哪一个阵营,再对于有限制的学校考虑选择派系。而有限制的城市中无限制的学校选择派系的贡献则放入了\(h\)中进行计算。

最后统计答案只需要枚举\(f_{i,j,k}\)中的\(j,k\),这样\(g\)和\(h\)的有效转移对应一段区间,前缀和一下。总复杂度\(O(T(10K^2M + NM))\)

代码

标签:连边,派系,限制,SAM,选择,2019,阵营,做题,联考
来源: https://www.cnblogs.com/Itst/p/10694453.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有