摘要:
引入 最大流算法分为两类,一种是增广路算法,一种是预留推进算法。增广路算法包括时间复杂度$O(nm^2)$的EK算法,上界为$O(n^2m)$的Dinic算法,以及一些其他的算法。EK算法直接进行增广,而Dinic则是通过沿着最短路增广优化了复杂度,它的做法是每次进行bfs求出层次图,再dfs沿着层 阅读全文
摘要:
给出一棵树,每个点有颜色,每种颜色有一个$v$属性,第$i$次经过颜色$j$可以获得$w_i v_j$的价值。多次修改单点颜色,查询路径的价值。$n,m,q\le 10^5$。 分析 可以发现,经过颜色的顺序是没有关系的,只需要知道有多少个颜色就可以了。也就是说,这个问题可以快速转移,修改是单点修改 阅读全文
摘要:
题意 给出两个长度小于等于2000的小写字母串,四个问题: A的最短子串不是B的子串 A的最短子串不是B的子序列 A的最短子序列不是B的子串 A的最短子序列不是B的子序列 分析 虽然求的是不公共,但是这还是一个字符串的匹配问题,只不过是求匹配不到。 对于子串的匹配问题,可以使用后缀自动机。然而对于子 阅读全文
摘要:
环的问题,经典方法倍长串,求出后缀数组,扫一次sa,如果sa[i]小于等于n,那么就输出这个字符串结尾的位置(即s[sa[i]+n 1])。 代码 c++ include include include using namespace std; const int maxn=4e5+10; char 阅读全文
摘要:
一棵树,每条边有边权,点有点权$r$,$n$次加入一个点,给出它与父亲的连边长度和它的点权,问此时总共有多少对点满足$r_i+r_j\ge dist(i,j)$。$n\le 10^5$。 分析 树上点对统计可以使用点分治。每次只需要统计新增了多少对满足条件的点。设一对点$(u,v)$的lca为$k$ 阅读全文
摘要:
给出一个长度为$n$的正整数序列$a$,$m$次询问$l,r,x$,问$max\{i|i\in[l,r],gcd(a_i,x)=1\}$。 $n,m,a_i\le 10^5$。 分析 这个题很妙啊。 二分答案,问题变成判断在一个区间$[l,r]$中是否存在$gcd(a_i,x)=1$,变成判断$[l 阅读全文
摘要:
数字表格 $T$次询问,每次给出$n,m(n,m\le 10^6)$,$f$为斐波那契数列,$f_0=0,f_1=1$,求: $$ \prod _{i=1}^n\prod _{j=1}^mf[gcd(i,j)] $$ 题解做法 这个题的思路很妙啊。 看到那个$gcd$,又注意到前面是个连乘,我们可以 阅读全文
摘要:
宇航员执行任务,有三个任务ABC。把宇航员按照平均年龄分成新老两组,老宇航员可以去AC,新宇航员可以取BC。宇航员之间有不能共存关系,问是否有合法的分配方案。 分析 虽然有三个任务,但每个宇航员还是只有两种选择。我们把宇航员当成变量,那么老宇航员True代表选择任务A,False代表任务C,新宇航员 阅读全文
摘要:
一个牧师要为结婚新人祈祷,祈祷必须在婚礼的最开始或最后,给出$n$对这天结婚的新人的结婚开始时间和需要祈祷的时间,问是否能满足所有的新人的时间,如果可以输出方案。$n\le 1000$。 分析 由于祈祷只能在最开始或最后,我们把新人祈祷在开始或最后看成变量,枚举任意两种时间,运用他们的矛盾性连边。 阅读全文
摘要:
这道题的题意感觉比较难懂。 给出$n$组钥匙,每组钥匙有2把,每组只能选一把钥匙用,有$2n$把锁,每个钥匙对应一把锁。一共有$m$层楼,从0楼开始,进入下一层楼有一道门,门上有两个锁,开任意一个都可以。问最多能够走到多少层。$$n\le 2^{10},m\le 2^{11}$$. 分析 走到第$x 阅读全文