【题解】Solution Set - NOIP2024集训Day18 优化建图
【题解】Solution Set - NOIP2024集训Day18 优化建图
https://www.becoder.com.cn/contest/5499
「SNOI2017」炸弹
考虑将每一次一个炸弹引爆另一个炸弹抽象成一条有向边。
然后缩点,再用 dfs 求出每个点能到达的其她点的数量。
显然边数是
注意到, 每个点向左/向右连的都是一段连续的区间。
我们直接在线段树上面维护哪些点没有被访问过,然后在线段树上直接找出来递归,然后把这个区间内没有被分配
然后卡在怎么最后怎么在 DAG 上面求能到达的点数。
「但是这个东西在一般的 DAG 上是个世纪难题。」好吧,世纪难题没想出来还是情有可原的。😅
但是对于这道题比较特别,最终的答案一定是一个区间,所以我们直接把每个点可以到达的点的区间并算出来就行了。
tarjan 求出来的强连通分量的标号满足 topo 序。
问题来了,最后 toposort 不太好知道每个点的连边啊(其实模仿上面的做法应该也可以),但是好麻烦 /kk。
感觉口胡的这个东西挺对的,但是很难真正的建出一张图来,然后套用图论上的一些工具。
实际上真正的线段树优化建图是这样的:
由于每个点的连边都是一个区间,我们可以把这个区间拆分成一棵满二叉树上的
「POI2015」PUS
线段树优化建图,然后差分约束。
虚点间的反边边权为
还有一个问题,这
实际上这
关于 spfa,它死了。介于这道题边权都是
其实一直对差分约束的理解都不算很清晰。
https://www.becoder.com.cn/contest/submission/2591898
这个代码实际上并不能保证所有的点都跑到,所以会出现很多 1e9。
「PA2012」Tax
好奇怪的题啊。
因为我们的权值在点上,这很难处理,我们考虑边转点、点转边。
这样很好计算边权。
对于起点我们特殊处理一下:把和起点直接相连的边变成的点和源点连边,边权就是原始的边权。终点同理。
但是问题在于我们连边的时候,对于每一个点每次都是度数的平方级别。
首先将每个点的邻接边按边权排序。
对于一个新点
注意虚点之间的边不能连双向边,否则会出现莫名其妙的边权为
最后跑一边 dijkstra 就行了。
「CF587D」Duff in Mafia
ps. 「匹配」的意思是不存在两条边有公共点。
考虑二分。
check 的话就是要对于每一条权值小于等于
- 如果当前边选择,那么相邻的其她边都不能选。
- 如果当前边不选,那么相邻的同色的边都必选。
然后其实上面一道题很类似,还是边转点。同时对前后缀建立虚点。
- 如果当前边选择,
向下标 连双向边。 - 如果当前边不选,先把那么相邻的同色放一起,然后同色内部双向连边。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话