zoukankan      html  css  js  c++  java
  • CF1383C String Transformation 2【分析性质,构造】

    传送门

    首先是转化成图论问题:在初始无边的 (20) 个点的有向图 (G_1) 中按某种顺序加边,使得 (forall iin[1,n])(A_i)(B_i) 有时间递增的路径。

    构造 (20) 个点的有向图 (G_2)(forall iin[1,n])(A_i) 连向 (B_i)。设弱连通块数为 (c),DAG 导出子图的最大点数是 (k)。可以构造出一种连 (2n-c-k) 条边的做法:

    显然每个弱连通块独立,可以分别考虑。对于 (n) 个点的弱连通块,将点重标号使得最大 DAG 导出子图的拓扑序是 (1,2,cdots,m),则按顺序连 ((1,2),(2,3),cdots,(m,m+1),(m+1,1))((m+1,m+2),cdots,(n-1,n),(n,m+1),cdots,(n-2,n-1))

    然后可以证明 (2n-c-k) 条边是下界。

    考虑转化一下命题:设存在一种加 (e) 条边的合法方案,则可以找到一个大小至少为 (2n-c-e) 的点集,其导出子图是 DAG。

    证明:增量法维护 (G_2) 的一个点集 (S)。一开始在 (G_1) 中无边,每个弱连通块只有一个点,(S) 是整个点集。然后考虑加一条边 ((u,v))

    • (u,v) 不在同一弱连通块,则合并这两个连通块。此时 (|S|) 不变,弱连通块数 (-1)
    • (u,v) 在同一弱连通块,若 (vin S) 则把 (v)(S) 中删去,否则无事发生。此时弱连通块数不变,(|S|) 至多 (-1)

    可以证明最后得到的 (S) 内的点都不能走回自己,所以是 DAG。且恰好有 (n-c) 条边是第一种情况,因此 (|S|ge n-(e-(n-c))=2n-c-e),得证。

    所以只要把 (c,k) 求出来然后直接输出 (2n-c-k) 就可以所以这 tm 是数竞题么

    计算 DAG 导出子图最大点数可以暴力做状压 dp,对每个点集都计算出它是否是 DAG。时间复杂度 (O(T|Sigma|2^{|Sigma|}+sum n))

  • 相关阅读:
    VueBlog
    java 代理模式
    集合框架
    面试题
    java 多线程
    网络编程
    HTTP
    MAVEN
    Redis高级
    深入浅出--梯度下降法及其实现
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14708121.html
Copyright © 2011-2022 走看看