zoukankan      html  css  js  c++  java
  • [CF1268D]Invertation in Tournament

    题目链接

    题意

    给定 $n$ 阶竞赛图,定义“反转”一个顶点表示将和它有关的边全部反向,现要用一系列反转操作获得一个强连通竞赛图,求最短的反转序列的长度和方案数。

    题解

    首先我们知道当 $n ge 4$ 时,$n$ 阶强连通竞赛图存在 $n-1$ 阶强连通子图,因此可以反转剩下的一个点,使得新图仍为强连通图。

    若图已经强连通,不需反转顶点。

    若图至少含有三个 SCC ,对竞赛图的 SCC 拓扑排序,取既非第一个也非最后一个 SCC 中的任一顶点反转,不妨设头尾 SCC 分别为 $H, T$ ,反转了 $u$ ,除此之外还有任意顶点 $v$ ,那么我们有路径 $H o v o T o u o H$ ,因此新图是强连通图。

    若图非强连通图,且存在一个 SCC 含有至少 $4$ 个顶点,取出一个不少于 $4$ 个顶点的 SCC 中的恰当顶点反转,使得该 SCC 内的顶点保持强连通。假设反转的为 SCC $U$ 中的顶点 $u$ ,除此之外还有 SCC $V$ ,不妨设边的方向为 $U o V$ ,那么我们有路径 $(U-u) o V o u o (U-u)$ ,因此新图是强连通图。

    根据上述过程,如果至少需要反转两个顶点,那么图至多有 $6$ 个顶点。当 $n le 6$ 时,只需要枚举所有组合;当 $n>6$ 时,先看是否本身已经强连通,然后枚举反转哪个点再判断强连通。

    技巧:判断竞赛图的强连通性

    如果竞赛图非强连通,其拓扑序最后一个 SCC 中的所有点的出度都比其余点小,因此将出度数组排序,该竞赛图强连通当且仅当不存在 $k<n$ 使得最小的 $k$ 个出度之和为 $k choose 2$ 。

    实现链接

  • 相关阅读:
    使用AsyncTask简单的文件遍历
    如何创建黑名单
    关于PopupMenu的用法
    联系人的搜索和添加
    php获取真实IP地址
    socket.io获取客户端的IP地址(修正官方1.0.4版本BUG)
    ubuntu下安装bind9
    install source nginx 1.6.0
    在Ubuntu下的samba实现
    买了新硬盘,给ESXI的虚拟机挂进真实硬盘。
  • 原文地址:https://www.cnblogs.com/nealchen/p/CF1268D.html
Copyright © 2011-2022 走看看