牛客练习赛127
个人感觉质量挺好,拿 CF Div.2 来对标也是出的比较好的一场。唯一的缺陷可能是E/F应该换个位置?
简要写个题解?
A
给定数组
,以及常数 ,定义 当 时候为 ,否则为 。
显然排序之后贪心将
B
给定一个正整数
的质因子分解 , ,给定 ,求 。对 取模。
显然就是
不知道后面这个式子用等比数列求和分母会不会变成零,总之对于
也即设原式值为
否则有
C
给定
点 边带权无向图,多次询问 ,求能否选出一个边集,使得至少有 个连通块,至多有 个连通块,如果可以,求出这个边集里可能的最小边权的最大值。
容易发现
更加形式化一点,对于答案边
假定全部加入这样的边后有
证明:考虑加入所有边后,对各个连通块都求一颗生成树,其余非生成树边删去,那么我们可以任意断开一条非答案边都会使得答案不变且连通块个数增加一,最终可以做到只保留答案边,
个连通块。
那就简单了,直接模仿 Kruskal 算法,将边权从大到小排序,依次加入,维护连通块个数。不妨设加入
那就是找到第一个
D
给定一棵树,最初全为白色,要求将至多
个点染为黑色,要求最终白色点对之间距离最大的最小。
显然二分答案。
我们倒过来看最终局面,我们断言最终局面,所有白点定然是一个连通块。
证明:如果不是这样,考虑一个孤立的白点,将其染为黑色,然后将原白点连通块与该白点最长路径上遇到的第一个黑点变白,答案一定不会变差,因为以该白点为端点的所有路径的最大值定然比这个新的白点与连通块中点的所有路径最大值更大。对每个白点都进行这样的操作,最终一定会变成一个连通块。
那么假设二分答案为
更强的信息:求出可以选出的最大大小的连通块。
不妨设
初始:
转移:
然后所有可行的最大的
说个需要注意的点:其实我们在二分
也就是最小点覆盖问题。我因为把一般图最小点覆盖和二分图最小点覆盖搞混,打网络流吃了2罚时
E
结论集合怪。草了。
一个无向完全图,给若干边定向后,满足所有环都不包括有向边。这个限制相当强大。
考虑一个无向连通图的生成树,往中间随便加一条有向边都会形成环。
由此我们可以推出一个推论:
定向后,如果只保留无向边,则所有的连通块全部是完全图。
并且,如果将一个连通块缩为一个点,那么这些有向边只会组成一个DAG。而且这个DAG有唯一零入度点和唯一零出度点,且所有点出度加入度为点的个数。
所以我们设
则显然可以类比拓扑排序的过程进行DP,也即
显然如果求出
然后另一个离谱的事情就出来了
我们发现
这就抽象了。
打表可以求出
(刚好算到
然后直接暴力DP。。
我好奇的是出题人是怎么发现这个东西的。
F
给定一颗基环树,保证不是自环,每条边有边权,定义简单路径为 不经过重复边 的路径,定义路径权值为路径上所有边边权的异或和。
给定
草了看成了不经过重复点,居然有75,恐怖如斯
首先如果是一棵树,我们直接预处理
对于环的处理,我们先考虑第一类路径:顺时针走。
考虑选定环上一个点为起点,然后先对环做一个异或前缀和作为环上点的
那么如果一个点对,下标差不超过
这样就70了
然后我们考虑是不经过重复边的路径,那么我们考虑如何判断两点之间简单路径能否经过环,其实也就两种情况:
- 两个点分属环上不同点的子树里
- 两个点在环上同一点的子树里,但其LCA是这个点。
所以不妨设
那么
不妨设整个环的边权异或和为
这个偏序关系仅仅只是一个不等关系,考虑在Trie上时,我们只是需要判断是否可以走那一棵子树。所以我们只在乎那颗子树里是否有点,满足其
这个问题不用想得太复杂,我们对于Trie上,维护两个二元组
意思就是第一个二元组记录该子树里,出现时间最晚的点的
第二个二元组记录该子树里,
这样查询就行了。
但是需要特判一下Trie里是否有合法解。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战