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]<dis[u][v]且dis[x][v]<dis[u][v]那么x就是合法的。注意一棵关键树中可能有多条直径,我们取编号最小的一条,在判断x是否合法的时候如果两条链的长度相等那么我们就要比较一下它们的编号。

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

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

T2:题解待更新。

T3:题解待更新。

发布了149 篇原创文章 · 获赞 24 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/chiyankuan/article/details/104025172