zoukankan      html  css  js  c++  java
  • AGC029F

    题意

    给定(n-1)({1,2,...,n})的子集(E_i)(E_ige 2)),每个子集选择两个点连边,使得最后形成一棵树。

    做法

    考虑二分图:(ulongrightarrow id(i)(uin E_i))

    假设我们得到了解,观察其在二分图上的样子是怎样的?

    对于(E_i),选出来的为((u,v)),二分图上选出((u,i)(v,i))
    由于最终构成了一棵树,对于任意右侧集合(S),选出的左边的点集并大小(ge |S|+1)(1)

    这等价于,若我们删去左侧任意节点,那么对于右侧集合(S),选出的左边的点集并(ge |S|)
    根据( ext{hall})定理,此时((n-1)-(n-1))二分图有完美匹配。

    那么我们先网络流跑一遍完美匹配,如果不存在完美匹配显然不合法。
    注意,若存在完美匹配,不一定合法,因为不一定满足(1)

    我们假设满足(1),可以构造一组解:

    (1)为根( ext{dfs})
    每次遍历(u)所在的(E_i)(集合(i)还没有访问过),然后继续往(i)的匹配边的点( ext{dfs})
    如果满足(N(S)ge |S|+1),那么一定能找到(i)
    假设现在已经用过了(T)集合,(T不为全集),无法在已经遍历的点找到另外的集合,那么(N(U-T)le |U-T|),与假设不符。(其中(U)({1,2,ldots,n-1})即全集)

  • 相关阅读:
    C#操作符??和?:
    使用Windows8开发Metro风格应用一
    使用Windows8开发Metro风格应用二
    Win8使用技巧
    详解 xls xlst xml 一
    SqlDataAdapter DataSet DataTable 详解
    DataSet 与 xml
    FileTracker : error FTK1011编译错误
    我的CHROME插件
    Komodo升级错误
  • 原文地址:https://www.cnblogs.com/Grice/p/12952005.html
Copyright © 2011-2022 走看看