图论
图论
CF76A Gift
思路
因为有两个变量,所以先按照其中一个 排序,就像图海说的两只鸟先拍死一个再说。
设生成树边集为 ,将排序后的边 加入时, 已经确定,所以可以直接将 暴力插入,然后排序求一次最小生成树,将无用的边删去。
时间复杂度
优化
发现边集 中的边已经按照 升序排列,故直接暴力插入
时间复杂度
P4180 [BJWC2010] 严格次小生成树
先求出最小生成树,然后做一下倍增,维护最大值和严格次大值。
对于每一条非树边,将其加入图中,删去这条边的两端点到 的边的最大边(若最大边边权与非树边相等则删去严格次大值,若没有严格次大值,则跳过此非树边)
最后对新树的边权和求一下最小值,即为所求。
时间复杂度
CF1076D Edge Deletion
前置:最短路径树
不妨直接从 开始跑 ,边跑边生成最短路径树,直到边数大于 或者 跑完了 退出就可以了。
CF1108F MST Unification
在这里哦
CF1650G Counting Shortcuts
前置:分层图
呜呜呜,这个题的题干不知怎么了,看错了好多次,QWQ
我们将图按照距离分层,发现如果是最短的话,那么路径上只会有从 的路径,而如果是次短的话,就回恰好有一条在同一层内的路径。
所以设 表示到 的最短路径数量和次短路径数量
对于一条同层边 有
对于一条跨层边 有
发现 可能在需要被转移时还没有算完,于是先算同一层的 再算跨层的
CF1737D Ela and the Wiring Wizard
在这里哦
P2149 [SDOI2009] Elaxia的路线
正解还没看呢,唔,手上只有一个自己写的 玄学算法A掉了这个题。
大概就是将两组最短路算出来,然后先将第一个人的最短路的边全部处理出来,处理出其中的每一个点到之前的点的距离。
对于第二组,也是先找一个最短路的边。对于一个点,处理出可以到达这个点的最短路上的点,然后看在第一个人处理出来的距离中有没有这两个点,然后取个最大值即可。
注意哦,以上都为单向边。
正解的话,先鸽了吧。
P1341 无序字母对
前置:欧拉路
巧了,这个前置我似乎不会,等我学学。
嗯,好了,可能会了,开始吧!
直接将两个字母连边,然后先判是否有欧拉路
判断方法:
-
无向图欧拉路
其中度数为奇数的点的数量不是 就是 ,否则无解。
如果为 则这两点之一取小的作为起点
-
有向图欧拉路
图中恰好存在 个点出度比入度多 (这个点即为 起点 ), 个点入度比出度多 (这个点即为 终点 ),其余节点出度=入度。
-
有向图欧拉回路
所有点的入度=出度
-
无向图欧拉回路
所有点的度数都是偶数
注意一下记录答案,必须要倒序,在这里有详解,再此感谢
P8201 [传智杯 #4 决赛] 生活在树上(hard version)
思路
可以发现,如果在 间的简单路径上有一个点的点权为 ,则成立,反之则不存在这种点。
于是问题转化:问树上 简单路径上是否有点的点权为
这是一个经典问题,对点权离散化,将询问离线到 上,开个桶记录一下就可以了。
注意,如果 的点权为 的话,要特判一下。
CF427C Checkposts
大水题,只用记录一下每个环里面最小值和其对应的点的个数即可
所以一个 和乘法原理即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效