图论做题记录
1|0图论
一些图论建模和纯图论题。
首先是一些基础的 bfs,dfs,生成树。
常见的模型有最短路,分层图,欧拉回路,二分图,差分约束,同余最短路,图染色等,需要灵活转化。
1|1P5100 [JOI 2017 Final] 足球
思路:大概方向是容易想到的,就是拆点跑最短路。
比较简单的方法是建 3 层点,第一层是人带球,第二层是球横向滚动,第三层是求纵向滚动,先求出每个点距最近的球员的距离,然后就好求最短路了。
1|2[AGC032C] Three Circuits
题意:有一张
思路:没发现是欧拉回路,输麻了。
其实把边分成 3 个集合就相当于是要找 3 条欧拉回路。
于是原图首先得有欧拉回路,那么每个点的度数都是偶数。不过还有一些不合法的情况。
如果存在一个点的度数
如果所有点的度数都是 2,那么就无解。
否则,如果有
发现第一种是无解的,条件就是
1|3CF1140F Extending Set of Points
题意:定义一个点集合
思路:考虑对行列建二分图,那么最终的拓展集合应该是每个连通块是完全二分图,然后就好做了。
1|4CF1442C Graph Transpositions
题意:给你一个
你可以进行以下两种操作:
- 移动标记:如果存在一条
的边,将标记从 移动到 ,这个操作需要 秒。 - 图翻转:翻转图上的所有边的方向,将图上每一条边
替换为 ,第 次使用这个操作需要耗时 秒。
你需要找到将标记从
思路:抽象题。
当时想到了
结果有一种做法就是先进行第一步,如果能到达就结束,否则就进行第二步,以翻转操作为第一关键字,移动作为第二关键字跑最短路,这样就结束了。
还有一种玄学做法,就是把大于
1|5P5292 [HNOI2019] 校园旅行
题意:无向图,每个点有 0/1 的权值,多次询问两点间是否存在一条路径满足路径(不一定简单)上的点权连起来是回文串。
思路:想到了维护设
正解就是在这个基础上,考虑到每个回文串就是若干段
因为奇偶性恒定,于是我们想到了二分图。对于每一类边,我们判断每个连通块是否是二分图,如果是那么我们只用保留一棵生成树,否则在生成树上加个自环即可,这样我们就可以把边数降到
1|6P8276 [USACO22OPEN] Hoof and Brain P
题意:有一张有向图,有两个点上有石子,每次操作先手会选择一个石子,后手会选择一条出边移动石子,要求必须走到一个没有石子的点上,如果走不了就先手赢,否则如果可以一直进行就后手赢,每次询问给出两个石子的位置,求谁赢。
思路:好题。
自己只会类似过河卒一样的搜索。
正解:首先,如果初始有点在不在环上,那么 B 必胜,于是可以建反图跑拓扑排序,这样被遍历过的点就是 B 必胜的点。
再考虑剩下的点,我们对每个点染色,初始
考虑怎么求出每个点的 col,可以用 map 维护每个点出边指向的点的颜色种数,每次启发式合并两个颜色集合的点即可。
1|7CF1149D Abandoning Roads
题意:一张
思路:好题。
主要是利用了最小生成树的性质:任意两点间路径最大值一定是最小的。
这就意味着如果两点间有一条由 a 边连接的路径,那么条路径一定在最小生成树上。
同样有:如果我们把所有 a 边连接的连通块缩起来,那么任意一条可能在最小生成树上的路径一定不会重复经过一个连通块,因为这样会有两个存在 a 边路径的点由 b 边连接。
于是我们可以
我们发现有些状态是可以不要的。我们记录经过的连通块是防止离开再进入一个连通块,而如果存在大小不超过 3 的连通块,我们即使不记录是否经过也不会得到一个离开再进入这个连通块的路径,于是可以不记录这些连通块,那么剩下的连通块至多只有
1|8CF1458D Flip and Reverse
题意:有一个 01 序列,每次可以翻转并反转一个 01 个数相同的区间,求操作后字典序最小的序列。
思路:好神仙的题目。
考场上发现操作等价于翻转前缀和序列,然后就没继续想了。
正解就是在此基础上,发现在前缀和之间连边后,任意一条欧拉回路都对应着一个最终的字符序列。
可以感性理解。
于是就变成了求字典序最小的欧拉序,可以简单解决。
1|9CF1583H Omkar and Tours
题意:给定一棵有
现在给出
题意:好厉害的题目。
首先,自然得想到可以按
假设所有点权都不相同,那么我们可以直接求答案,否则
正解是一个很神仙的想法。考虑我们记录一个点权最大的点,同时记录它到其他点权最大点的答案,这样每个点的答案一定是它到我们记录的点的路径上和我们记录的点到其他点权最大点的答案中较大的一个(证明可以考虑反证),于是就很简单了。
1|10P9189 [USACO23OPEN] Custodial Cleanup G
题意:一个
可以进行无数次以下操作:
-
捡起当前房间的钥匙。(FJ 可以同时手持多个钥匙)
-
将部分或全部手上的钥匙放在当前房间。 (房间内可以同时放多把钥匙)
-
通过一条边,移到一个相邻的房间,前提是目标房间是房间
, 或者 FJ 拥有至少一个目标房间颜色的钥匙。
已知
思路:首先,一边捡钥匙一边放钥匙一定不优,于是考虑分成两部分,能否拿到所有钥匙和能否把所有钥匙放回。
对于第一步,可以直接广搜,如果可以走,那么就直接走,否则就存入对应颜色的集合里,如果某一次拿了这个颜色就把这个集合里的点加入队列。
对于第二步,和上一步差不多,不过如果没有这个点颜色的钥匙但是这个点的颜色和终状态相同那么也可以走。
1|11[ARC092F] Two Faced Edges
题意:对于无向图的每一条边,判断将这条边反向后强联通分量数量是否改变。
思路:考虑充要条件。
- 原图中存在
的路径 - 原图中存在
的路径且不含上面的边
如果只满足一条,那么就会变化。
证明:
- 如果都不满足,这两个点不会产生强联通分量,不用考虑。
- 如果都满足,那么是否反向都会使强联通分量,不用考虑。
- 这时可以说明,如果没有
的边,那么 一定不在一个强联通分量中;如果有,那么就可以在同一个强联通分量中。因此会改变。
第一个条件可以
第二个条件相当于是判断
1|12CF875F Royal Questions
题意:有
思路:考虑建边,边
1|13CF79D Password
题意:你有
同时你有
每次你可以选择一段连续的子序列,且长度为某个
求最少的操作次数,使得最后有且仅有
思路:考虑转成差分序列,那么每次就会操作两个位置,因为
1|14P2474 [SCOI2008] 天平
题意:有一些砝码,重量为 1,2,3,给定一些砝码的大小关系,现在把 A,B 放在砝码一边,求有多少种选择两个砝码的方法使得天平左边重、一样重、右边重。
思路:看上去就很差分约束。
设
然后就是差分约束。因为数据范围小,可以直接 Floyd,即
最后枚举
1|15P3084 [USACO13OPEN] Photo G
题意:有一个 01 序列,有若干限制形如
思路:设
1|16P3530 [POI2012] FES-Festival
题意:所有参赛者的成绩都是整数秒。他还会为你提供了一些参赛者成绩的关系。具体是:他会给你一些数对
思路:容易发现是个差分约束的模型,但是求的确实不同成绩的最大数量。
考虑如果是一个强联通图,那么任意两个变量的差都有有限的上下限,那么我们选差最大的两个作为值域的两端,这样中间一定就都能取到。
考虑一般的情况,考虑求出所有强联通分量,对于每个 SCC 可以用上面的方法来求,而缩点后是个 DAG,就说明不存在相互的限制,那么每个 SCC 都可以单独来看,于是单独求解即可。
1|17P4819 [中山市选] 杀人游戏
题意:有向图中有若干白点和一个黑点,每个点为黑点概率相等。每次可以任选一个点发起询问,询问结果为该点能直接到达的所有点的颜色。
求最优情况下不对黑点发起询问且得知黑点标号的概率。
思路:对于一个强联通分量,如果我们知道了一个点就可以知道全部的颜色。那么我们缩点,此时是一个 DAG,而且我们也只会问入度为 0 的点。
于是猜测答案就是
此时还漏掉了一种情况,就是如果可以只剩一个点没有确定时,可以不问这个点。
具体地,如果存在至少一个入度为 0 且大小为 1 的强联通分量,那么答案就是
1|18P4926 [1007] 倍杀测量者
题意:给出一系列不等式
思路:首先,答案肯定有单调性,可以二分答案。
常见的差分约束是差,并不是倍数,因此要想办法把乘积变成加和,那么就不难想到取
1|19P7916 [CSP-S 2021] 交通规划
题意:有
思路:首先可以想到每次暴力跑最小割,但是复杂度稍高。
考虑怎么优化。我们发现这张图是网格图,根据 狼抓兔子,我们可以把平面图最小割转成对偶图最短路。
但是考虑到我们有不止 1 条射线的限制,这样用源汇连接所有黑白点后并不是平面图,不能直接处理。
我们先把相邻的同色射线合并,然后把不同色的区域两两匹配。可以发现我们的匹配不交是最优的,于是可以先暴力求出每个区域到其他区域的最短路,然后用区间 DP 来求最优的匹配。
复杂度
1|20P7515 [省选联考 2021 A 卷] 矩阵游戏
题意:有一个
思路:考虑如果我们知道了
考虑调整。例如,我们可以对一行或者一列的奇数位加上
发现有加有减,于是考虑把偶数位置上的
然后发现这就是每个
1|21P7516 [省选联考 2021 A/B 卷] 图函数
题意:对于一张
- 初始化返回值
,图 。 - 从
至 按顺序枚举顶点 ,如果当前的图 中,从 到 与从 到 的路径都存在,则将 ,并在图 中删去顶点 以及与它相关的边。 - 第
步结束后,返回值 即为函数值。
现在给定一张有向图
更进一步地,记删除(按输入顺序给出的)第
思路:考虑实际意义,相当于是在
于是考虑计算对答案有贡献的点对。
因为删边不好处理,考虑时光倒流,这样点对一定是越来越多,可以求出每个点对第一次的加入的时间,然后求一遍后缀和。
根据定义,我们容易想到可以用 floyd,从大到小枚举关键点,就可以计算答案了。
复杂度
1|22P7520 [省选联考 2021 A 卷] 支配
题意:给一张有向图,多次询问,每次加入一条边,问有多少个点的支配集大小发生变化。
思路:因为
然后考虑怎么解决询问。如果一个点的支配集大小要发生变化,可以只考虑父亲,即能否通过新加入的边在不经过妇父亲的情况下到这个点。
复杂度
1|23「JOISC 2014 Day3」电压
题意:JOI 公司的某个实验室中有着复杂的电路。电路由 N 个节点和 M 根细长的电阻组成。节点编号为
每个节点可设定为两种电平之一:高电平或者低电平。每个电阻连接两个节点,只有一端是高电平,另一端是低电平的电阻才会有电流流过。两端都是高电平或者低电平的电阻不会有电流流过。
试求:有多少个电阻,可以通过调节各节点的电压,使得「没有电流流经该电阻,且其他 M-1 根电阻中都有电流流过」。
思路:首先容易看出充要条件:一条边合法当且仅当在所有奇环的交里,且不在任意一个偶环里。
然后考虑建出 dfs 树,计算每一条边在几个奇环和偶环中出现。
具体地,对于一条非树边,如果只有一个奇环,那么这条非树边就合法,否则如果两个奇环相交就会构成一个大偶环导致非树边不合法,不相交就会直接无解。于是求出树上合法的边数,再判断是否只有一个奇环即可。
1|24「JOISC 2015 Day 1」卡片占卜
题意:有 ABCDE 5 个数,表示有一个序列
思路:做过类似的题目 Password,做法是大致相同的,就是用图论建模。
考虑对于一种操作
因为只用反转两个区间,反转的方式很少,可以简单判断。
1|25「JOISC 2015 Day2」Keys
题意:JOI 社有 N 个社员,从 1 到 N 编号。社员出勤时间从时刻 0 到时刻 M。保证在时刻 0 和时刻 M 的时候,全体社员都在公司内。
今天,每个社员会恰好离开公司一次。第 i 个社员会在时刻 S_i 时刻离开公司,会在 T_i 时刻回到公司。保证不会同时有 2 个人同时离开或者回到公司。
JOI 社会社大楼有一个大门作为入口,所有社员必须从这个门进出公司。在公司内部可以自由的打开或者关闭这个门。但是在公司外的话,必须有钥匙才能打开或者关闭这个门。在时刻 0,门是关闭的。因此,第 i 个社员能在 T_i 时刻回到公司,当且仅当在 T_i 时刻的时候门开着,或者他有钥匙。
进门的社员和出门且有钥匙的社员可以选择是否去关门。当没有钥匙的社员离开时,他们无法锁门。
现在你有 K 把钥匙,你需要把这些钥匙给其中 K 个社员,使得第 i 个社员在 T_i 时刻都能够进入公司,并且从 0 时刻到 M 时刻,门被关着的时间最大。
思路:挺不错的题目。
容易想到考虑每一段时间的贡献。假设这一段开始是员工 A,结束是员工 B,有 4 种情况:
- A 进来,B 出去,这一段时间直接可以关门;
- A 进来,B 也进来,那么无论 A 是否有钥匙,只有 B 有钥匙这一段时间才可以关门;
- A 出去,B 也出去,和上一种类似,无论 B 是否有钥匙,只有 A 有钥匙这一段时间才可以关门;
- A 出去,B 进来,那么只有 A,B 都有钥匙这一段时间才可以开门。
我们观察贡献的形式,发现是形如如果一个人有钥匙那么会有一些时间可以关门,两个人都有钥匙那么有一些时间可以开门,如果转到图上,就等价于每个点有点权,有一些带边权的有向边,我们要给 k 个点染色,要使被染色的点的点权和加上两端都被染色的点的边权和最大。
同时我们可以发现更强的性质。对于一个点,出边和入边最多只有一条,而且起始点和终止点的度数都是 1,换言之,这张图的每个联通块都是链,那么就可以直接 DP 了。
具体地,我们设
1|26「JOISC 2016 Day 4」危险的滑冰
题意:给出一个四周都是冰块的冰场,JOI 君在滑冰,每次滑冰只能在这个方向上最近的冰块旁停止,同时在它的起点位置产生一块冰块,问从起点到终点的最小代价。
思路:容易想到从一个地方开始停留到相邻的地方只需要两步,到冰块旁的地方停留只需要一步。现在有个问题,如果我们有可能重复利用之前放的冰块,那么我们就不好直接计算最小代价了,那么会不会有这种情况呢?
答案是不会的。因为我们从一个位置到一个我们停留过的位置再移动显然是没有直接从这个位置开始更优。
那么我们就可以直接建边跑最短路了。
1|27「JOISC 2018 Day 1」栅栏
题意:IOI 国的土地可以表示为一个平面直角坐标系。他的土地为坐标系上
JOI 君要在牧场里修一些栅栏,来把牧场围起来,使得他的牛不可能从牧场内的任何一点走到他的土地之外。栅栏是一条长度为正实数的线段。牧场里已经有一些栅栏了。两个栅栏之间如果有共同点,那么它必然是至少一个的栅栏的端点。
JOI 君可以随意建栅栏。要求栅栏既不在牧场内,也不在 JOI 君的土地外,它们的长度任意,方向任意。他甚至可以修一条将整个牧场全围起来的栅栏。建造一条长度为 l 的栅栏的费用是 l。两条栅栏可以相交,重合...... 怎么修都没问题(可参考样例)。
请你计算修栅栏的最小费用。
思路:又是计算几何。
我们需要画出一条闭合折线,并且能够把正方形包围。
考虑我们一定是把已有栅栏用新的栅栏连起来,或者是让已有栅栏和正方形边界连起来。因为栅栏不能在正方形内,我们把两个栅栏连接起来一定不会只用正方形一条边界的一部分,这样一定是不优的,因此我们可以把只把正方形的四个角当成栅栏,这样我们就只需要考虑连接两个栅栏的贡献了。
对于每一对栅栏,我们求出连接这两个栅栏最小的代价和这条线段。如果这条线段和正方形有交,我们就不能选,而且我们用其他方式连接这两个。现在问题就变成了找最小的环使得包含这个正方形。
对于判包含,我们可以从正方形中引出一条射线,如果这条射线经过了折线奇数次,就说明被包含了。
于是对于每一对栅栏,我们求出连接这两个点的线段经过了射线多少次,这样我们的问题就是求一个经过射线次数为奇数的最小环,可以用 Floyd 解决。
复杂度
1|28「JOISC 2018 Day 4」野猪
题意:JOI 君是生活在 IOI 森林里的一头野猪。森林可视为一个包含 N 个结点,M 条带权无向边的连通图。结点的编号分别为
开始时有一个长度为 L 的序列
接下来有 T 次修改,每次修改会给出两个整数
思路:没想到图论还有 DDP。容易想到对于任意两点,维护最短路和初边、终边都不一样的次短路,但是这样是假的,有时候只会限制出边、终边中的一个,于是我们就维护 4 条路径。记
,最短路; ,其中 ; ,其中 ; ,其中 。
这些路径可以用
现在的问题是怎么求这 4 条路径。
因为和边关系密切,我们可以把无向边拆成两条有向边,然后求边间的最短路。
复杂度
__EOF__

本文链接:https://www.cnblogs.com/Xttttr/p/18015664.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探