01 2017 档案
摘要:对于每个k,问题等价于求有多少置换满足: 1.存在一个循环长度为k 2.任意一个循环长度≥2 枚举这种环的个数t: 设gt表示至少有kt个人分成t个长度为k的循环的方案数,考虑枚举第一个人和哪些人分在了一起,同时有(k−1)!种可能的环,有$g_t=C(
阅读全文
摘要:建立新图,原图中每条边在新图中是点,新图中每个点的点权为−e[i].c+e[i].b,边权为0。 若e[i].d≤e[j].a,则连一条i到j的单向边。 对于原图中每个点,将所有入边和出边分别排序,然后建立一排虚点表示后缀,通过双指针将边数优化至O(m)。 在新图中求
阅读全文
摘要:将袋鼠大小和口袋大小分别从小到大排序。 枚举从左往右第一只没有被放入任何口袋的袋鼠x,那么x之前的所有袋鼠、以及x能装入的所有口袋都应该在匹配边上。 按这只袋鼠将上下两个序列分为两部分,设f[i]表示左边内部有i条匹配边的方案数,g[i]表示右边内部有i条匹配边的方案数。
阅读全文
摘要:求出每个点向上下左右能延伸的最大长度left、right、up、down。 枚举每一条对角线,如果j可以作为左上角,i可以作为右下角,那么有: j+min i-\min(left[i],up[i])+1\leq j
阅读全文
摘要:建立二分图,首先如果存在度数为0的点,那么显然无解。 如果存在度数为1的点,那么这个点的匹配方案固定,可以通过拓扑排序去掉所有这种点。 那么现在剩下的点度数都至少为2,因为左右点数相等,且左边每个点度数都是2,所以右边只能是每个点的度数都是2。 在这种情况下每个连通块是一个环,相
阅读全文
摘要:对于在o点的某个询问,有两种情况: 情况1:走到任意一个点x然后超链接跳到o的某个祖先y再走到o。 枚举所有y看看是否存在x即可。 时间复杂度O(nm)。 情况2:走到o的某个祖先x,然后走到x子树内某个点y,在x和y之间不断通过超链接来回走,
阅读全文
摘要:把集合看成左边的点,图中的点看成右边的点,若集合i不包含j,则连边i->j,得到一个二分图,等价于求这个二分图的完备匹配个数。 设f[i][j]表示考虑了前i个集合,匹配了j个集合的方案数。 转移则是枚举当前集合是否匹配,然后设g[i][j]表示考虑了前i个内部点,匹
阅读全文
摘要:注意到答案不超过5,因此可以考虑BFS求出距离起始态或者终止态不超过2的所有状态。 设它们到起始态、终止态的距离分别为f[S],g[S],则ans=\min(5,f[S]+g[S])。 时间复杂度O(n^6\log(n!))。
阅读全文
摘要:建立AC自动机,因为不存在某个串是另一个串的后缀,因此匹配到任意位置都只可能匹配一个串。 预处理出每个串出现的所有位置,总的出现次数为O(m)。 设f[i][j]表示考虑了前i个串,最后一个串匹配位置是j的方案数,DP即可。 转移则是枚举f[i-1][k],j和k显然可以
阅读全文
摘要:如果Jan先手,那么可以放入一个对Petra来说价值inf的物品,就变成了Petra先手。 对于Petra来说,拿物品的顺序是固定的,按这个顺序排序。 那么如果把Petra的选择看成(,Jan的选择看成),一个合法的方案对应了一个合法括号序列。 因此贪心选取$\lfloor\frac{n
阅读全文
摘要:通过BFS可以求出到每个站点的最小花费。 每次从队首取出一个点,枚举所有它能花费1块钱就到达的线路,通过两遍递推求出最大时间。 注意到每个点和每条线路只有第一次使用时有用,所以总时间复杂度为O(n+m)。
阅读全文
摘要:考虑shift-and算法,那么只需要维护10个bitset即可,f[i][j]表示字符串S的第j位是否是字符i。 对于修改操作,直接暴力修改10个bitset即可,时间复杂度O(\frac{|S|\sum}{32})。 对于查询T在S中所有出现的位置,有$ans=ans
阅读全文
摘要:如果我们将两个人拥有的牛混在一起,并按照战斗力从小到大排序,同时把第一个人选的牛看成),第二个人选的牛看成(的话,那么我们会发现一个合法的方案对应了一个长度为2k的括号序列。 于是DP即可,f[i][j][k]表示考虑了前i头牛,目前选了j个左括号,括号序列的前缀和为k的
阅读全文