C
由于A随便瞎搞就过了,以为这题状压瞎搞也能过...就没往图论那边想了
\(a_i\longrightarrow b_i\),以下忽略\(a_i\longrightarrow b_i(a_i=b_i)\)
定义:对于弱连通图\((V,E)\),\(S\subseteq V\),\(S\)的导出子图为DAG,\(|S|\)最大的叫做最大DAG,其表示为\(LDAG=|S|\)
结论:对于弱连通图\((V,E)\),其最小调整次数为\(2|V|-1-LDAG\)
证明:
先思考所有情况的上界:对任意弱连通图,其最小调整次数\(\le 2|V|-2\)
对于\(a\longrightarrow b,a\longrightarrow c,b\longrightarrow c\),最优方案为先将\(a\)向\(b\)调整,再将\(b\)向\(c\)调整
我们可以发现,最优解大概是一个链状,恰好为链状的情况就是A题
进一步的,将调整的方案描述成一个序列\(T\)
\(T\)可行的充要条件显然是:对于\(a\longrightarrow b\),存在\(i,j\in[1,|T|],T_i=a,T_j=b\)且\(i<j\)
那么有\(T=1,2,\cdots,n,1,2,\cdots,n-1\)可以抽象出所有边
.
考虑具体情况,对于\(S\subseteq V\),\(S\)的导出子图为DAG
我们有最小调整次数\(\le 2|V|-1-LDAG\)
可以使\(T=\{1,2,\cdots,n\}\backslash S,S,\{1,2,\cdots,n\}\backslash S\)
我们有最小调整次数\(\ge 2|V|-1-LDAG\)
对于\(a,b,c\),若\(a\longrightarrow b,b\longrightarrow c,c\longrightarrow 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_i\le dist_n\),原因显然
F
最大流=最小割
那么我们可以钦定哪些边为割,哪些边不为割
暴力做是\(O(2^kmaxflow(n,m)+q2^k)\)
可能卡卡常能过吧
但对于此题有更优的方法,注意到边权较小,对于一张图,若得到了残缺网络,添加一条边的复杂度是\(O(w\times m)\)的
故可以做到\(O(maxflow(n,m)+2^kwm+q2^k)\)
话说这题要是放到C,过的人应该翻十倍吧