CF 杂题选做

来源:笔者在vp中认为比较好的一些题目

每道题前会有tag,可以根据自己所需使用。(Ctrl+F请按照表格所给tag)

目前存在tag:难度评分,构造,树形DP

CF1515F

tag:构造,2600

给定一张图,点有点权 au,每次操作选择两个相邻的点 (u,v),如果 au+avx,则将两个点合并,问最后能否将所有点缩为一个。

思维比较妙的题。容易发现,如果所有的点不在一个连通块中,或者所有点的点权和 <(n1)×x,那么是无解的。

观察样例,我们发现将所有点合并的过程其实是找出了一棵原图的生成树。那么对于一个有解的图,是否对于任何一棵生成树都是一个合法解呢?我们尝试归纳证明这一点:

在一个图的生成树上,我们对一个叶子进行分类讨论:

  • aux 那么它能和 fa 直接合并,此时原树变成了一棵 n1 个点的树,仍然满足限制条件。
  • au<x 那么我们直接删去这个叶子和这条边,剩下部分一定是满足题意的,我们最后将 ufa 合并即可。

我们的解法也可以基于这一点:在dfs生成树的时候,我们从叶子开始,满足条件的边加入队列中,不满足的放入栈中,按顺序输出队列中和栈中的边即可,由上面的归纳证明可知这样的方案一定是正确的。

CF1276D

tag:树形DP,2900

给定一棵树,树上的所有点都没有颜色,按编号从小到大考虑每条边:如果连接的两点都没被染色,就任取一点染色,加入序列,否则跳过。问不同的染色序列数量。

定义一个点被一条边染色为,选择这条边是将该点染色。

定义一条连接 u,v 的边的编号为 (u,v)

考虑对于树上的一个点 u,每个点有四种情况:

  • 这个点被父亲边染色了
  • 这个点被编号小于父亲边的边染色了
  • 这个点被编号大于父亲边的边染色了
  • 这个点还没有被染色

我们可以据此设计dp状态:设 fu,0/1/2/3 分别表示 i 被比父亲小的边染色,被父亲染色,比父亲大的边染色,没被染色的方案数,当前遍历到的儿子是 vwuv 外的其他儿子:

  • 对于 fu,0/2
    • 钦定 (u,v) 这条边将 u 删去,v 此时还未被染色,或者比 u 更晚染色,取 fv,2/3
    • 如果 (u,w)<(u,v),则染色的均为 w,或 w 在此之前已经被染色,取 fv,0/1
    • 如果 (u,w)>(u,v),则 w 不会被 (u,w) 这条边染色,取 fv,0/2/3
  • 对于 fu,1,转移为 (u,v)<(fa,u)(fv,0+fv,1)(u,v)>(fa,u)(fv,2+fv,3)
  • 对于 fv,3,转移为 v(fv,0+fv,1)

读者自证不难,答案为 frt,0+frt,2+frt,3

CF1495D

tag:最短路,2600

给定一张图,定义这张图的生成树为从根到任意点的距离均为原图最短路的树,记 f(i,j) 表示同时满足 ij 是树根的生成树的数量。求所有的 f(i,j)

我们研究树的性质,发现如果原来在图上的边是 (i,j) 最短路上的一部分,那么这条边在生成树上也要选择。反证不难。那么如果 (i,j) 之间出现两条以上最短路径时,f(i,j) 是无解的,出现了环。

此时 (i,j) 最短路为必连边。不在最短路上的点,我们考虑有多少点可以做它的 fa。对于点 u,fa,需要满足 dis(i,fa)+1=dis(i,u)dis(j,fa)+1=dis(j,u)。将所有点满足的 fa 数量乘起来即为答案。

posted @   MisterRabbit  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示