C
由于A随便瞎搞就过了,以为这题状压瞎搞也能过...就没往图论那边想了
(a_ilongrightarrow b_i),以下忽略(a_ilongrightarrow b_i(a_i=b_i))
定义:对于弱连通图((V,E)),(Ssubseteq V),(S)的导出子图为DAG,(|S|)最大的叫做最大DAG,其表示为(LDAG=|S|)
结论:对于弱连通图((V,E)),其最小调整次数为(2|V|-1-LDAG)
证明:
先思考所有情况的上界:对任意弱连通图,其最小调整次数(le 2|V|-2)
对于(alongrightarrow b,alongrightarrow c,blongrightarrow c),最优方案为先将(a)向(b)调整,再将(b)向(c)调整
我们可以发现,最优解大概是一个链状,恰好为链状的情况就是A题
进一步的,将调整的方案描述成一个序列(T)
(T)可行的充要条件显然是:对于(alongrightarrow b),存在(i,jin[1,|T|],T_i=a,T_j=b)且(i<j)
那么有(T=1,2,cdots,n,1,2,cdots,n-1)可以抽象出所有边
.
考虑具体情况,对于(Ssubseteq V),(S)的导出子图为DAG
我们有最小调整次数(le 2|V|-1-LDAG)
可以使(T={1,2,cdots,n}ackslash S,S,{1,2,cdots,n}ackslash S)
我们有最小调整次数(ge 2|V|-1-LDAG)
对于(a,b,c),若(alongrightarrow b,blongrightarrow c,clongrightarrow a),每个点至少出现一次,至少有一个点出现了两次(这里的(longrightarrow)指能到达)
然后随便写个状压就完了
D
E
除了全(0)的情况,其他的都可以定义为(1)去吃掉其他的
考虑对一个目标串(t)判断可行性,令当前以及(t_{1,...,j}),最优匹配为(s_{1,...,i})
- (t_{j+1}=1),找到(s_{i+1,...,n})第一个(1)
- (t_{j+1}=0)(令(dist_i)为(s_{1,...,i})最长后缀全(0)的长度)
令(k)为(t_{1,...,j+1})最长后缀全(0)的长度,找到(dist_{i+1,...,n})第一个大于等于(k)的(通过归纳,我们发现其实是找到第一个等于(k)的)
我们考虑找到以(s_i)为结尾的所有串个数
令(f_i)为匹配到(i)的串个数。注意这里是匹配,与结尾不同
分(0)和(1)转移即可
细节:初始化时,找到第一个(1),即(s_i=1),令(f_i=i)
考虑(f_i)能作为结尾的,(dist_ile dist_n),原因显然
F
最大流=最小割
那么我们可以钦定哪些边为割,哪些边不为割
暴力做是(O(2^kmaxflow(n,m)+q2^k))
可能卡卡常能过吧
但对于此题有更优的方法,注意到边权较小,对于一张图,若得到了残缺网络,添加一条边的复杂度是(O(w imes m))的
故可以做到(O(maxflow(n,m)+2^kwm+q2^k))
话说这题要是放到C,过的人应该翻十倍吧