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