zoukankan      html  css  js  c++  java
  • CF1477D

    题意

    给定一个(n)个点(m)条边的无向图(无自环),需要构造两个(n)阶排列({p},{q})(forall (u,v)in E)满足((p_u-p_v)(q_u-q_v)>0),最大化(sum [p_i eq q_i])

    (nle 5 imes 10^5)

    做法

    很有意思的题

    显然,若一个点的度数为(n-1),一定满足(p_i=q_i)

    那么答案的上界为(n-|{uin V|deg_u=n-1}|),用以下方式构造出这个上界。

    忽略所有(deg_i=n-1)的点。
    如果我们可以将剩下的点分为若干个集合,满足:每个集合至少有两个点,且存在一个点与集合内其他节点没有关联。

    那么可以通过如下方法实现:

    对于每个集合(|S|=k),令与集合内其他节点没有关联的点为(x)(后文称之为关键点),那么可以令这个集合内点在两个排列中对应的集合相同,且为一个连续的区间([l,r]),在(p)中相对大小分别为(1,2,3,ldots,k),在(q)中相对大小分别为(2,3,ldots,k,1)(这里假设(x)(p)中为(k),在(q)中为(1))。

    由于(x)与集合内其他点没有关联,则无所谓,而集合内其他点的相对大小不变。
    再有这个集合在排列中均为连续区间([l,r]),故集合内与集合外的点的相对大小不变。
    (这里的不变,指两个排列中不变)

    那么是否可以将剩余点分为若干个集合呢?
    考虑剩余点构成的图有什么性质:每个点至少与一个点没有关联。

    我们通过如下构造证明有解:

    若存在一个点(v),只与(u)无关联,则让(u)作为关键点,对于所有与其无关联的点,拿出来,作为一个集合(S+{u})
    移除后的合法性:若移除后剩余点集,存在点与所有点均有关联,说明其原来必定(S)中某点无关,这与(S)的定义相悖。
    若不存在某点,至于一个点无关联,即每个点至少与两个点无关,那么任意拿出两个无关的点对((x,y)),对于其他只与(x,y)无关的点,拿出来,作为一个集合(S+{x}+{y})
    合法性同理。

    我做到这里大概就结束了,因为上述方法虽然能完成证明,但使用其来构造是很困难的,因为要维护:({vin V|v只存在两个无关联点}),我无法实现,如果哪位大佬会的话,不吝赐教。

    有两种比较简单实现的方法:
    一、
    对于一个尚未考虑的(x),取任意一个与其无关的点(y)

    • (y)也未考虑过,将(x,y)划分到一个结构中。
    • 如果(y)在某个结构,且是该结构的关键点该结构大小为(2),那么(y)作为关键点,(x)加入该结构。
    • (y)在某个结构,不是该结构的关键点,且结构大小(>2),那么将(y)移除,将(x,y)划分为一个结构。

    二、
    引理:任意一个(|V| eq 0)( ext{dfs})树,均可以分割成上述所说的若干个集合(即若干个菊花图)

    考虑每次最深的叶子节点所在菊花图,然后通过归纳容易证明

    就只需要求补图的( ext{dfs})树,容易线性时间内得到。

  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/Grice/p/14944211.html
Copyright © 2011-2022 走看看