zoukankan      html  css  js  c++  java
  • Codeforces Round #659(D未做)

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

  • 相关阅读:
    php高级进阶系列文章--第二篇(PHP基础知识复习)
    开发常用linux命令
    composer 包管理工具学习总结
    微信菜单加emoji图标
    onethink导出excel
    onethinkp导入excel
    导航效果css
    php发送邮件
    js初学者的div移动
    html图片预览
  • 原文地址:https://www.cnblogs.com/Grice/p/13379423.html
Copyright © 2011-2022 走看看