[ARC108F] Paint Tree
[ARC108F] Paint Tree
前言#
复习什么的就留到下周了, 顺便把格式调好
现在把每日一练打了差不多
今天补了一下午的
这道题是模拟赛
吉司机线段树和左偏树都只能明天搞了, 明天把
思路#
首先那几个
然后就是正解思路
首先, 这种题一般要根据答案算方案数
所以我们考虑计算答案等于
解决方法如下
题解摘抄#
先求出一条直径, 若直径的两个端点颜色相同, 则最长距离一定为直径
否则, 令两个端点分别为
枚举答案
考虑证明为什么要取直径的两个端点
由于
所以, 定义
定义
最终的总权值为
容易得到
。但是我们想要答案等于
的树的形态数
。很明显, 只需要容斥减去
即可, 也就是
。
注意
共有
种颜色分配方案。
初步理解#
我的理解是, 你要知道对于每个点, 到他的距离
然后你发现一个点是没有用的, 仅当其到任何点的距离都
你发现确定一个点, 可以递归确定所有到某个点距离
你发现直径
如果
具体证明一下, 如果存在
分成两种情况讨论
发现两种情况本质相同, 只是
我们只考虑
分类讨论之后, 你确定
还有一个误区是
最终理解#
捋一下
首先考虑一般性问题, 我们枚举答案
发现任意点对
这个问题怎么处理, 我们丢掉
这里会出现一个问题, 如果让被丢掉的
点随意分配颜色, 那么就变成「至多」答案为 , 我们一会再考虑这个问题
考虑剩下的点中如何处理, 特别的, 以下的讨论都仅在
暴力思路#
对于单个
具体的, 如果二分图染色出来无解那么必不存在这种情况, 否则方案数就是不在
注意这里的方案数是所有答案
所以需要简单容斥
我猜你想用
但是你容易发现,是不需要的, 所以实际上只需要
注意这种做法仍然错误, 因为的计算显然不应该从 开始, 会导致答案错误, 因为本不应该出现这种情况, 处理方式见下
你发现
然后如果一个
特别的是如果
具体的, 把上面的柿子变成
,
现在只需要动态维护, 符合条件的点集 即可
你可以用一个堆维护每个的 , 复杂度
还要证明二分图联通, 因为不连通需要乘以
而不是 , 其中 为连通块个数
这个是由直径的性质导出的, 假设直径两端端点为, , 因为一定有连边 , 所以任意 联通, 如果没有连边 , 要么就是 , 要么就无解
正解思路#
正解至少要做到
瓶颈在找
太神秘了不考虑了, 这题弄懂这部分通用的就行了
总结#
树上距离最大的问题, 往往可以向直径的方向转化
巧妙地地方在, 利用了直径的好性质
这种异色约束, 考虑找性质「异异得正」
常见的枚举答案算方案数的
但是一定要注意答案的意义, 无意义的答案一定不能计算
这种两种状态的约束问题一定要找性质, 一般可以类似
容斥解决一类算重问题, 这种特殊的可以类似差分处理
复习
这个题好像很复杂的样子, 那我复习
思路#
给定一棵
设
如果某种颜色没有出现那么对应的
求所有
公式化做题
- 求多种方式的贡献和
- 往往更改贡献主题, 求花费对应的操作方式个数
那么我们要计算有多少种操作方式使得
也就是说, 对于所有
考虑所有这样的点对, 不难发现可以用二分图染色解决存在性, 然后方案数就是
但是这样答案是
显然需要进简单容斥, 同之前写的
因为我们要计算所有
唯一的问题是计算不属于任意点对约束的点的个数
不难发现可以通过直径的性质去做
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现