Codeforces Round #659(D未做)

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,过的人应该翻十倍吧

猜你喜欢

转载自www.cnblogs.com/Grice/p/13379423.html