md,忍不了了,一拳把网络流打爆😡😅
Starry Night Camping
Solution#
sb题,可以发现如果不合法一定是存在路径类似于 (模 意义下的),那么我们直接每个点拆开,两个点之间连边为点权,然后不同层之间相邻的连边直接跑最小割就好了。
[CQOI2017]老C的方块
Solution#
也很蠢,跟上面的差不多。按下图编号即可。
可以发现不合法路径一定可以表示为 的,所以跟上面一样拆点跑最小割即可。
CF1288F Red-Blue Graph
Solution#
我们发现红点可以理解为红边-蓝边 ,蓝点可以理解为蓝边-红边 。那么我们把红边、蓝边都理解为流,假设红边为出边,蓝边为入边,那么红点即是入度-出度 ,蓝点则相反。
那么我们可以用上下界有源汇费用流解决,建图如下:
(Linux下画图真的很麻烦就直接用一下湘妹的吧😨😅)
可以看出这样建图不会一条边即红又蓝。
CF802O April Fools' Problem (hard)
Solution#
其实可以看出有一种暴力跑费用流的方法,即建二分图,然后左边往编号比它大的点连。
转成费用流之后就可以看出这玩意关于 实际上是一个凸包(这个比较显然),那么我们就可以用 wqs 二分。那么问题就是如何算最优方案。这玩意可以直接反悔贪心。所以就可以做到 。
不过似乎有直接模拟费用流可以做到 ,但是感觉不如 wqs 二分好写。
【UNR #1】奇怪的线段树
Solution#
挺有意思的。
可以看出我们真正关心的是是覆盖底部的节点,因为它们被覆盖,则祖先一定都能被覆盖。
然后我们可以发现的两个性质是:(右儿子是指是父亲的右儿子的节点,左儿子同理)
-
一个区间在线段树上会被拆成连续的右儿子和连续的左儿子。
-
任意右儿子左端点都不相同,左儿子同理。
那么我们其实相当于可以把一些节点串起来一起询问。具体来说,对于 的右儿子, 的节点 可以跟 拼在一起,对于 的左儿子, 的左儿子可以拼在一起。那么这个问题我们就可以用有源汇上下界最小流解决,即对于每个节点拆点,对于必须覆盖的节点两个点之间流量下界为 。
但是这样显然第 类边会爆炸,第 类边是 (根据性质 可以得出)。但是注意到我们完全可以对第 类边优化建图。所以就解决了。
复杂度据说是 的?不太会分析这种网络流建图的复杂度。不过似乎有贪心可以做到线性的。
[BJWC2018]Kakuro
Solution#
虽然不是太难,但是这个shit题面让我直接看题解了(指读错题了)。
我们其实不难构造出一个合法解,即空位都填 ,然后线索都填它所控制的空位个数。注意到一个重要限制是保证一个位置一定能同时被两个线索控制。那么我们可以考虑把线索拿出来按横纵分成二分图,然后对于一个线索而言,如果原来是 ,现在是 ,改变所需权值是 ,如果 ,那么有 是可以用 去改回去的,然后我们还可以用 让它往 上面继续增加。
然后对于格点考虑,那么即是控制它的两个线索同时更改,那么我们可以把这个视作一条边,然后连边跟上面一样即可。
因为我们只是需要最小费用可行流,所以当 cost 的时候退出即可。
不过这样建边似乎不能处理不能更改权值的点,其实可以发现把权值设为 即可,这样它更改一定不优,最后判一下无解即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现