文章分类 - 图论场
1
学的太杂乱了,久不用心里都没谱,发觉还是得总结一下。
摘要:原题在这里: 概述题意,给定一个字符串数组和一个target字符串,问能否用使用字符串数组中字符串最少次数拼接出target字符串,如果不能则-1。 analyse: 很基础的想法: 桶存遍历target,再遍历一边字符串数组,先验证是否能拼凑出同时,存入字符串数组中每一个字符串的桶存字符,以便在b
阅读全文
摘要:原题在这里: 概述题意:给定初始和结束字符串和字符串数组,问每次只固定变化一个单词,最少变化次数,没有则-1。 analyse: 字符串最短路,没啥好多说的,之前写过两次:here 思路如下: 将初始和字符串数组内的字符串的所有子串转入一个sub二维数组中,用map对每一个sub字符串记录id,另外
阅读全文
摘要:原题在这里: 概述题意:给定一个有向图,问从未知入口的最长路径末节点。 analyse: 现在整明白题目了以后巨简单,但是我写的时候真看不明白题目啥意思“入口呢?”,人家确实是不给入口,自己判断。 于是我写出了这样的code: #include <bits/stdc++.h> using names
阅读全文
摘要:原题在这里: 概述题意,相比于I,这里多了要求出输出所有最短路径。 analyse: 1.在队列元素里增添一个vector<string>属性即可 code: class Solution { struct iis { int x; int y; vector<string> s; friend b
阅读全文
摘要:原题在这里: 概述题意:在给定01矩阵中,找最大的1构成的矩阵的面积。 1.my_way,爆搜+剪枝过了。 analyse: 定义mp[i][j]表示原矩阵[0~i][0~j]区间内的1数量 那么当两点(i,j),(u,v)(u>=i,v>=j)有mp关系: mp[u][v] - mp[u][j]
阅读全文
摘要:原题在这里: 概述题意:给定节点数和无向图边,问能构成最小高度树的所有根节点。 analyse: 1.最直白的方式就是bfs遍历找当前节点的最长的最短路。ans选为该(最长的最短路)最短节点集合。 但是数据范围不适合,考虑优化,我想当然式的以为从边数最多节点开始遍历直到深度变大(以为从边数最多开始一
阅读全文
摘要:原题在这里: 概述就不用说了, 直接分析: dfs(x,y):当前深搜遍历节点为x,使用的ans存储下标为y1.当x为最后元素时候结束搜索2.当搜索不是第一条路径时候新建存储路径,所以遍历前存储now路径3.遍历完后,删除未到达最后元素的路径 因为不熟悉,还是被卡住了 code: class Sol
阅读全文
摘要:原题在这里: 本来是一道很普通的搜索题,但是因为做得急,没动脑子,结果反而被卡住了一个小时。 我的解法(错误的): 直接遍历地图上O处的点,dfs四周,条件为当该点(x,y)出界or延伸点(a,b)出界则return false,否则修改(x,y) 错误点: 一,vis回溯写的不规范,且没考虑完整,
阅读全文
摘要:很久没写图论的题了,生疏了,c++式建图都不会了(丑陋) 水题在这里: 概述题意: 给一个无向图,从原点开始求最长的路径长度(再稍处理一下) 其实主要是记录一下c++式的建图(没写过) 定义: int num; struct ii { int to, next; ii(int x, int y) :
阅读全文
摘要:首先建立模型: 给定一个连通的无向图G,至少要添加几条边,才能使其变为边-双连通图 在去找边双连通分量的时候,运用low值相同会处于同一边双连通分量中,用割点式的tarjan算法 void tarjan(int x, int p) { dfn[x] = low[x] = ++cnt; vis[x]
阅读全文
摘要:深有分析且学习到东西的好题,存一个:http://poj.org/problem?id=1236 总结一下: 1.环对A问,也就是最少起点遍历全图的影响,所以需要tarjan缩点成DAG。 2.题意误解了几次,倒不是说单词不认识,真·阅读理解——差。 3.具体分析我写在代码注释里了,很享受这种分析的
阅读全文
摘要:离散学过欧拉图的一些知识 今天遇到一个题,挺有趣的。 首先,欧拉图,是指能从任意一点,不重复经过所有边能回到起点的图便是欧拉图。这个路也叫欧拉回路。 次之,欧拉通路,任意一点,不重复经过所有边,不回到起点。这个路叫欧拉通路。 记得书上的分析是从出入度来分析的, 对于无向图,一点的度即是该点连接的边数
阅读全文
摘要:拓扑排序经典运用于判断有向图种是否存在环。 拓扑排序的遍历也一定是无环的。 经典例题为:洛谷:https://www.luogu.com.cn/problem/P1347 同题:poj:http://poj.org/problem?id=1094 fjut:http://120.78.128.11/
阅读全文
摘要:不赘叙了,问就是找图里的割点。 运用tarjan算法,维护dfn[] 和 low[] 两个数组, 先说结论吧,就是: 一个割点,他的所有子节点的low值都会大于等于该割点的dfn值, 也即,对于边(u,v),存在有low[v]>=dfn[u],则u为割点。 分析如下: 分为根节点和非根节点来讨论:
阅读全文
摘要:在DAG图种,常会有最长路的寻找,这时就需要经典的缩点建新图了。 网上带佬们的代码花样百出的,着实不太看的来,在我学习的时候愣是东拼西凑地忙活了两小时才做了一个缩点的模板题,可太气了。 最终按我的理解,将解释和代码合一起了。 #include<bits/stdc++.h> #include<algo
阅读全文
摘要:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。 其寻找算法为tarjan算
阅读全文
摘要:tarjan算法 我就不自己讲解了,学习链接:https://blog.csdn.net/qq_34374664/article/details/77488976 着实简单,可能图论已经快融会贯通了,一看就懂。 留一份自己写的(自认为)极其美观好看优雅大气的代码。 #include<cstdio>
阅读全文
摘要:话说至今也好久都没做到最短路的题了,大比赛被思维题卡得死死的,都没机会做到算法题, (甚至怀疑是不是图论现在不吃香了啊?) 图论思维题倒是有遇到过,像是1e9数据的图里给定点找相邻的点,也算不上啥。 正文开始吧。 最短路呢,根据题目要求和数据范围有几种经典算法。 首先呢,讲讲存图 方法有四种,邻接表
阅读全文
摘要:基础理解就不总结了, 理解了自然就会写,多写几次就不会忘记了。 那么就推荐一篇:https://zhuanlan.zhihu.com/p/24986203 我就总结说说技巧吧。 首先呢,我个人还是更喜欢bfs的,好写好理解,而且联系到有使用容器来优化的一些算法,更常用吧。 先抬一手习惯代码: #de
阅读全文
摘要:嗯,,发这个博客主要是因为网上学习资源太多,鱼龙混杂,(为了世界的胜利与正义,光明与希望,爱与和平。。。)我就转发别人的好文章吧。 链接:https://blog.csdn.net/qq_34374664/article/details/77488976 着实简单,可能图论已经快融会贯通了,一看就懂
阅读全文
1