关于图论,大概包括这些算法
图的存储
DFS(图论)
BFS(图论)
树上问题
矩阵树定理
有向无环图
拓扑排序
最小生成树
斯坦纳树
最小树形图
最小直径生成树
最短路
拆点
差分约束
k 短路
同余最短路
连通性相关
2-SAT
欧拉图
哈密顿图
二分图
最小环
平面图
图的着色
网络流
Prufer 序列
LGV 引理
弦图网络
经过这个图咱们能够看到的是,咱们须要在原有的最小生成树的基础上,在另外找一个边,使其变成次小生成树优化
首先咱们能够跑一边 \(kruscal\) 将最小生成树创建出来,并设置一个 \(big[i][j]\) 表示 \(i\) 到 \(j\) 的路径上的最大权值,咱们能够经过没有在最小生成树上的边来与最小生成树上的边进行比较,能够得出公式spa
其中 \(sml_{tree}\) 为最小生成树树的总权值,\(w\) 为当前不在最小生成树上的边3d
本笔记主要是记录本身的刷题的历程以及中心思路,对知识点的讲解会不时更新blog
当图中存在惟一的最小生成树时改算法适用,不然求出来的值不变,仅仅为另一个次小生成树排序
模板代码字符串
\(spfa\) 的 \(dfs\) 优化经过以一个点为开头,经过松弛操做不断迭代,直到找到找到一个曾经被找过的点时,便可找到一个环get
\(spfa\) 的 \(dfs\) 优化能够经过二分和公式推论(找松弛条件)来达到求最值的问题,解决了查找时没法准确记录权值的问题数学
对于找负环,能够有两种作法,一是经过 \(dfs\) 优化来判断是否有负环,二是能够经过一个点入队的次数\(\ge n\) 来判断
相对于 \(dfs\) 优化找负环,判断入队次数更加的稳定,且不容易被刻意的样例卡掉
对于点的数据范围 \(n\le 10^3\),考虑用邻接矩阵进行解答,更加简单
该题首先给出全部的道路修建的可能性边,求解 $ m $ 条边所有建完时 \((1,i)\) 的最短路 \(D_i\),和实际状况下建好的边所造成的图中 \((1,i)\) 的最短路 \(S_i\) 相等的建设方案数,并对 \(2^{31}-1\)取摸便可
须要注意的是最好开 \(long long\)
首先在存图的时候作一个操做,由于是双向图,全部正反存这个没有问题,其次就是可能会出现重复的边的状况,那么对于彻底建好的图的最短路,重复的边中不是最小边的全部边没有贡献,全部建边的时候对边的权值取一个 \(min\) 便可
其次经过邻接矩阵版的\(dj\)求出从全部的 \((1,i)\)的最短路
最后根据乘法原理判断就能够了,乘法技术原理能够参考组合数学第一节OVO。
思路很简单,首先枚举一遍全部的距离,并用最小生成树的方法进行升序排列,从最小的距离开始一一枚举。
由于无线电在两个村庄中只须要建造一个,因此所设置的 \(cnt\) 为可能一共能够设置的数量
按照村庄之间能够间接或者直接的链接能够得出来,用并查集来作便可
每次发现没有能够直接或者间接的链接的村庄就记录一下距离,直到记录到 \(cnt=\)能够设置的卫星的数量时中止,此时记录的就是最小的答案值
惟一的一个坑点就是误觉得电站只能建造一个=_=
其实能够将 \(0\) 点看作电站的来源点,将全部点与 \(0\) 点链接,权值为在该点建造电站的费用
其余的电网用边链接起来
跑最小生成树便可
经过手模样例能够发现,从最小的权值向最大的权值连边的限制就会愈来愈小
因此就跑一边最小生成树,从小向大的依次累加便可
每一次求边的时候只须要 \(+\) 当前的权值 \(+1\)
见非严格次小生成树
首先有一个万古不变的真理:一个图中的最小生成树,无论怎么改变边,一个的权值的边的数量在最小生成树中是固定不变的
那么根据这个来开始找就好了
首先创建一棵最小生成树,并按照边权升序排列,随后就把每一种边权的左右端点都找出来,\(dfs\)一遍找一找有多少知足的边便可,用乘法原理计算答案
这个题目能够经过一个随随便便的哈希把每一个字符串的前两个字母和后两个字母转换数字来连边,每个字符串的开头两个字母和结尾两个字母连一条\(w=len_s\)的边
由于是让咱们进行找环,而且要找出平均长度最大的环,那么能够考虑二分一下\(ans\)
那么二分红立的条件便可为:
\(dp\) 竟在图论中???
首先能够设置状态
设 \(dis[i][j]\) 为一共通过 \(j\) 的距离到达 \(i\) 点所用的最小时间