首页 > 技术文章 > CF1477D

Grice 2021-06-28 13:59 原文

题意

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

\(n\le 5\times 10^5\)

做法

很有意思的题

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

那么答案的上界为\(n-|\{u\in 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\}\)
合法性同理。

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

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

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

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

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

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

推荐阅读