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})树,容易线性时间内得到。

原文地址:https://www.cnblogs.com/Grice/p/14944211.html