ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[CF869D] The Overdosing Ubiquity 题解

2022-07-10 10:39:10  阅读:147  来源: 互联网

标签:原图 特殊 CF869D 题解 路径 标出 Ubiquity 那么 我们


CF link

你谷 link

一道非常妙的搜索题,我们可以试着一步一步推到答案。

首先我们思考答案数的上限,加入原图就是一棵树,那么答案总数就是 \(n^2\),因为任意两点之间都有且仅有一条路径,那么考虑再加上一些新边后的路径数会产生什么变化,发现新产生的路径肯定是经过这些新边的,我们可以枚举走哪些边、走的顺序和方向,总体算起来答案最对就是 \(\mathcal O\left(n^22^mm!\right)\),发现因为 \(m\) 非常小,所以后面几乎可以看做是个大常数。

那么问题就变成了点实在太多了,我们很自然地想到要把点删去很多,我们又可以发现这棵树中虽然点很多,但是因为加上去的边非常少,所以有许多的点应当是相似的,实际上设作为新加边端点的点为特殊点,则任意一条路径都可以看成从起点先走到路径上的第一个特殊点,再走到路径上的最后一个特殊点(可能是同一个点),然后再走到终点,而前面和后面的路径是唯一的,也就是说所有任意两点之间如果有多条路径则分叉一定产生在两个特殊点之间。

那么我们可以将所有特殊点之间的路径上的点都取出来构成一张生成图,这样的话剩余的所有点能够到达的第一个生成图中的点一定是唯一的,即将生成图上的点在原图中标出,原图中的每一个点在不经过一个别的标出点的情况下只能走到一个标出点,那么我们对每个标出点进行统计走到它的原图点的个数,介于这张图的特殊性,这里所有标出点一定被所有特殊点及它到根的路径包含,这样的好处是不会增加太多点,同时因为每个标出点的父亲也是标出点,那么我们需要统计的实际上就是它的子树大小,同时如果它的儿子是标出点,那么要将儿子的子树减去,可以通过完全二叉树的性质直接统计。

具体代码实现上难度不大,细节也还不多。

标签:原图,特殊,CF869D,题解,路径,标出,Ubiquity,那么,我们
来源: https://www.cnblogs.com/LaoMang-no-blog/p/16462663.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有