2020.01.16【省选组】模拟

这套比赛目前只改出一题。

 

T1:首先我们发现对于k个关键点构成的一棵树,最有答案一定是2*sum-maxdis,其中sum表示所有边权的和,maxdis表示直径的长度。知道了这个之后我们就可以分两部分算答案。

首先计算sum。我们枚举每一条边,然后计算这一条边可能出现在关键树上的方案数。设这条边的一侧有x个关键点,另一侧有y个关键点(显然x+y=m),那么这条边出现在关建树中的方案数就是C(m,k)-C(x,k)-C(y,k)。

然后计算maxdis,我们枚举两个关键点u、v,接着计算u~v这条链成为直径的方案数。这是我们还要枚举一下其他关键点,判断一下其他关键点是否能出现在u~v这条直径的关建树中。具体方法就是对于一个关键点x,若dis[x][u]

现在假设对于一组u、v有s个合法的s,那么这组u、v作为直径的方案数就是C(s,k-2)。

至此我们就完成两部分的计算了。在求两关键点间的距离时我们可以用虚树的思想来求。

 

T2:题解待更新。

 

T3:题解待更新。

你可能感兴趣的:(省选/NOI)