CF1477D
题意
给定一个\(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}\)树,容易线性时间内得到。