
图论
文章平均质量分 59
图论yyds
阐上
hh厨
展开
-
Floyd 求最小环问题
板子板子板子板子板子板子原创 2022-11-26 12:28:45 · 683 阅读 · 0 评论 -
“蔚来杯“2022牛客暑期多校训练营3 F - Fief (点双连通算法)
"蔚来杯"2022牛客暑期多校训练营3F-Fief(点双连通算法)原创 2022-08-02 11:26:38 · 537 阅读 · 0 评论 -
武汉理工大学第三届程序设计竞赛 B-拯救DAG王国(拓扑性质处理可达性统计问题)
武汉理工大学第三届程序设计竞赛 B-拯救DAG王国(拓扑性质处理可达性统计问题)原创 2022-07-22 12:21:28 · 523 阅读 · 0 评论 -
【CF1253D】D. Harmonious Graph(并查集,区间贪心问题)
和谐图题意:一张和谐图,要求满足,任意两点 l、rl、rl、r 之间如果有路径,若有 mmm 满足 l<m<rl<m<rl<m<r,l、ml、ml、m 之间也要存在路径。给定一张图,问你最少给这个图加多少条边,能使得它变成 “和谐图”。思路:显然对于一个连通块(点之间通过边间接或直接连通),我们只需要记录一个 最小的点 和 最大的点,这两点就能涵盖所有要求。如果这个块是和谐的,必定要求块中点编号是连续的。观察任意两个块,可以发现区间的原创 2022-04-09 21:37:15 · 315 阅读 · 0 评论 -
【2021四川省赛】E.Don’t Really Like How The Story Ends(图的dfs遍历)
不喜欢故事的结局题意:给一张图,问最少加几条边,能在 dfs 时产生 1 — n 这样的 dfs 序。考察对图的遍历的理解。思路:基本的,对于已给的每个点,延伸出去的边按照子节点编号从小到大排序。这样在遍历时优先遍历小的点。在某次遍历时,按顺序本该遍历 K 点,但遍历到比 K 大的点,显然此时产生断层,应该加一条边到 K 点上。模拟这个过程。Code:Code:Code:#include<bits/stdc++.h>#include<unordere原创 2022-04-05 14:56:17 · 416 阅读 · 0 评论 -
洛谷:P3243 [HNOI2015]菜肴制作(拓扑序列、建反图、贪心)
美食家老嗨题意:很容易读偏,以为是求满足限制下的最小字典序。要求是在满足所有限制后,优先做 1,此外优先做 2 …—— 摘自xyz32768Code:Code:Code:#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b) memset(a,b,sizeof a)#define cinios (ios::sync_with_st原创 2022-04-05 14:39:38 · 385 阅读 · 0 评论 -
洛谷:P6560 [SBCOI2020] 时光的流逝(博弈、拓扑序列)
时光流逝题意:博弈论经典操作,一人动一下,谁不能动就输了。思路:针对点,观察性质,找到必胜必败态。如果此题给的的 DAG(无环),显然我们会很好做,无脑拓扑反推即可,但题目没保证。如何处理环的问题?答案是稍稍修改我们拓扑的减度操作。—— 摘自 duyi 的题解一旦确定了一个节点的状态(必胜或必败),就立即加入到队列中,并且从此不再访问它。这样可以避免“环”对传递答案造成的不必要的“隔绝”。拓扑的变式修改,很巧妙。Code:Code:Code:#include<bi原创 2022-04-05 11:27:42 · 266 阅读 · 0 评论 -
洛谷:P2189 小Z的传感器(并查集染色)
洛谷:小Z的传感器此题考察思维 —— 结合题意图性质对 并查集 的巧妙运用一开始想着对于给定顺序的房间序号,从起点(顺序最前)跑到终点(顺序最后),观察是否能不重复地跑遍这个序列但发现很难维护,不太能用最短路算法求解看了题解 之后发现,可以用 扩散 的思想去模拟光顾过程首先先标记没有传感器的房间,这些房间不可以被访问(因为有先后限制),其余未标记的房间显然都可以随意走,所以可以直接连接成一个连通块每次按照序列先后,解除当前房间的标记,表示当前房间可以访问了(满足先后限制),然后把这房间可以走原创 2022-01-13 13:19:05 · 211 阅读 · 0 评论 -
洛谷:P2685 [TJOI2012]桥 (正反最短路,区间维护)
桥题意:Boss会镇守一条路,使得玩家从 1 走到 n 的最短距离尽可能大;思路:显然 Boss 必须镇守 1 到 n 最短路上的一条路,不然玩家肯定能走最短路。所以此问题就变成:删掉最短路上的任意一条边,使得 1 到 n 的最短距离最大暴力:我们肯定能枚举删掉最短路上的每一条边,然后再跑一遍最短路,但不用想时间复杂度都爆表;那我们能不能预处理出这些情况,使得不需要每次都跑一遍最短路呢?答案是可以的:首先以 1、n 为起点各跑一遍最短路,这样我们能得到两颗最短路树交织形成的原创 2022-02-14 14:47:31 · 755 阅读 · 0 评论 -
洛谷:P1653 猴子(图存储、逆向思维 删边 -->加边)
洛谷:Monkey非常恶心的一道题,题意上来先卡你,让你觉得给出的是一颗 树的结构(一只猴两只手)但反转了,猴子的手是有向边,图中存在 重边 或 自环一只猴的手不是抓着另一只猴子的手(松开两方都分离),而是抓着他身体而已,只有两只猴之间没有边了才会分离所以对于数据,我们不仅要记录 树的结构,也要记录 图的结构(遍历时才能不遗漏信息)在图建成后,题目会给出 M 次操作:每次某只猴松开其中一只手,这等价于在我们的图中删去一条边还要记录分离落地的猴(一个猴落地的前提就是和 1号猴 失去联系,因为原创 2022-01-05 18:43:52 · 417 阅读 · 0 评论 -
洛谷:P1444 [USACO1.3]虫洞 wormhole(找环 + 枚举暴搜)
虫虫虫洞当存在环的时候,就会出现无限循环,也就相当于 dfs 时走回了曾经走过的地方数据范围很小,我们可以枚举两两配对,然后搜索每一个点出发能产生的结果,判断是否会无限循环,若否就统计方案数同时这里可以用一个排序减少工作量Code:Code:Code:#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b) memset(a,b,sizeof原创 2022-01-23 13:31:40 · 692 阅读 · 0 评论 -
洛谷:P2407 [SDOI2009]地图复原(标记欧拉回路)
地图复原题意:告诉你哪些地方转了弯、哪些地方走直线(不告诉方向),让你还原出初始的一个欧拉路径(环)思路:观察可以发现,任意一行的 " T " 的个数必定是偶数,为了形成回路,转过一个弯之后必定要转回来;同理任意一列也是一致,由此就可以模拟出一种必定满足的情况代码:#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b) memse原创 2022-01-23 11:41:14 · 502 阅读 · 0 评论 -
洛谷:P3907 圈的异或(无向图找环 + 异或前缀和)
洛谷:圈的异或虽然说 y总 说过,找最小环的问题通常用 Floyd 求解,但此题只要求找到的环上异或值相同,并不是求边权总和;而 Tarjan 强连通缩点,又会丢失环上保留的信息;因此,换一种更方便高效的方法找环:dfs在有标记的状况下,dfs 的时间可以控制在 O(n+m)O(n+m)O(n+m),非常优越;dfs的过程中,搜到了曾经标记过的点 == 找到了一个环如何去记录环上边的异或信息?维护一个异或前缀和,记录某点 自起点(开始搜索时进入的点) 到此位置 的路径上所有边的原创 2022-01-19 18:25:38 · 360 阅读 · 0 评论 -
洛谷:P1524 十字绣(图论中 (出 / 入) 度的应用)
洛谷:十字绣我们把格子上的点抽象成图中的节点,同时开一个数组记录它的度(无向图)我们再把点的贡献定义为:图中一个点通过相连的边得到的度数,也就相当于它贡献出的针数如果该点与正面的某一条线相连,我们就把它的度加 1如果该点与反面的某一条线相连,我们就把它的度减 1因为与该点相连的 一条正面边 和 一条反面边,可以抵消掉一次针数、抵消一次贡献(相当于只是经过该点)最后统计一个连通块内所有点的 度数的绝对值(贡献),除以二就是这个连通块贡献的针数为什么要除以二?因为每一个点都记录的话就会重复计数原创 2022-01-11 11:43:22 · 615 阅读 · 0 评论 -
洛谷:P1262 间谍网络(强连通缩点 + 拓扑序维护信息)
洛谷:间谍网络很清晰明了的一道 考察 强连通缩点转拓扑序 的题目需要维护的信息:是否能控制全部间谍最少的贿赂花费1:强连通缩点转拓扑序列维护信息即可2:贪心,缩点时维护每个连通块的最小间谍贿赂,显然最少花费只花在入度为 0 的连通块上综合一下即可(结果还是被卡了 )代码:#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b) m原创 2021-12-28 22:35:56 · 852 阅读 · 0 评论 -
洛谷例题:图的遍历、记录(有自环/无自环)
洛谷:信息传递很特别的图论题,很特殊的图,很特殊的标记解法(曾经走过的路不需要再走,不重复跑图就可以把时间复杂度压成线性)#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b) memset(a,b,sizeof a)#define cinios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(原创 2021-11-28 22:40:35 · 536 阅读 · 0 评论 -
P1363 幻象迷宫(图论 ? 搜索)
洛谷: 幻象迷宫比较特别的一道搜索题(分类为图论?理论上也是图)需要注意的点:没法开辟太多空间存多个迷宫暴力搜索如果走过一次某个位置(标记),显然再走到就相当于有出路需要维护信息(当前下标和映射下标),同时保证不遍历重复点注意负数取模#include<bits/stdc++.h>#include<unordered_set>#include<unordered_map>#define mem(a,b) memset(a,b,siz原创 2021-11-24 18:33:25 · 506 阅读 · 0 评论